使用Open.NAT打开端口/端口转发

时间:2015-11-05 00:32:26

标签: c# port portforwarding upnp miniupnpc

我正在尝试创建一个简单的程序,只需单击一下即可打开/转发某些端口,而无需每次都在控制台中执行此操作。

我知道有两个不同的项目可以打开端口,第一个叫做" 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!");
}

不知道为什么不工作,也不知道如何让它适用于所有端口。希望有人能告诉我完成这项任务的正确方法。

0 个答案:

没有答案