我正在尝试创建一个简单的程序,只需单击一下即可打开/转发某些端口,而无需每次都在控制台中执行此操作。
我知道有两个不同的项目可以打开端口,第一个叫做" upnpc" - > http://miniupnp.free.fr/files/,但必须为每个端口手动执行,或者第二个可以在C#中使用的lib - > https://github.com/lontivero/Open.NAT
第一种方法是创建一个脚本并用C#调用它,但我认为这不是一个好主意。
upnpc-shared -a 192.168.1.12 6622 6622 TCP
第二个与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, 6626, 0, "port 6626"));
Console.WriteLine("Done!");
}
不知道为什么不工作,也不知道如何让它适用于所有端口。希望有人能告诉我完成这项任务的正确方法。