我正在尝试创建一个简单的程序,只需单击一下即可打开/转发某些端口,而无需每次都在控制台中进行操作。
好吧,我知道两个不同的项目可以打开端口,第一个叫做“ upnpc”-> http://miniupnp.free.fr/files/,但是必须为每个端口手动完成,第二个则是可以打开的lib在C#-> https://github.com/lontivero/Open.NAT中使用。
第一种方法是创建脚本并使用C#调用它,但我认为这不是一个好主意。
upnpc-shared -a 192.168.1.12 6622 6622 TCP
Run Code Online (Sandbox Code Playgroud)
第二个带有lib的东西,无法弄清为什么不起作用。
这是我的代码,应该打开/转发3个端口,但只有最后一个有效。附言:我认为它一个接一个地打开了端口,但由于某种原因,只有最后一个似乎起作用,其他端口停止了。
public static void Main()
{
OpenPort().Wait();
Console.WriteLine("\nPress any key to exit...");
Console.ReadKey();
}
private static async Task OpenPort()
{
var nat = new NatDiscoverer();
var cts = new CancellationTokenSource(5000);
var device = await nat.DiscoverDeviceAsync(PortMapper.Upnp, cts);
var ip = await device.GetExternalIPAsync();
Console.WriteLine("Your IP: {0}", ip);
await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 6622, 6622, 0, "port 6622"));
await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 6625, 6625, 0, "port 6625"));
await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 6626, …Run Code Online (Sandbox Code Playgroud) 我想使用libminiupnpc (github)来查找设备并进行TCP端口转发/映射.但是,我找不到一个体面的文档或示例代码来说明如何使用miniupnpc API.
有人知道一个好的文档或示例代码,显示如何使用此库?
我现在拥有的是:
#include <miniupnpc/miniupnpc.h>
...
int error = 0;
UPNPDev *dev = upnpDiscover(2000, nullptr, nullptr, 0, 0, &error);
Run Code Online (Sandbox Code Playgroud)
...似乎正确地返回我的路由器上的信息:
2014-09-08 11:36:17.417132 debug - UPnP ERROR: 0
2014-09-08 11:36:17.417394 debug - UPnP device:
url: http://192.168.1.1:5431/dyndev/uuid:207605a3-efd0-d0ef-a320-162376a3d04000
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
buf: http://192.168.1.1:5431/dyndev/uuid:207605a3-efd0-d0ef-a320-162376a3d04000
Run Code Online (Sandbox Code Playgroud)
问题upnpDiscover()不仅仅是不明显需要接下来要做什么.