【问题标题】:open port programmatically in C#在 C# 中以编程方式打开端口
【发布时间】:2020-02-24 11:24:50
【问题描述】:

我正在尝试创建一个程序来打开路由器端口,可能是在 C# 中。我听说可以使用 opennat C# 库。我尝试使用此代码,但程序没有显示答案。

public Form1()
{
    InitializeComponent();
    OpenPort().Wait();
}
private static async Task OpenPort()
{
    var nat = new NatDiscoverer();
    var cts = new CancellationTokenSource(5000);
    var device = await nat.DiscoverDeviceAsync(PortMapper.Upnp, cts);

    await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 11000, 11000, 0, "port 11000"));
}

【问题讨论】:

  • NAT 不代表router
  • 不要在 winforms 应用程序中使用.Wait 来等待任务完成,它会死锁。 await nat.DiscoverDev... 方法很可能已完成,然后一切都陷入僵局,因为您阻止了处理此完成的处理。尝试在构造函数中删除对Wait() 的调用,看看会发生什么。
  • 此代码查找任何支持 UPNP 的设备。这可能是您的电视、控制台、电话、本地机器或根本没有。然后它将尝试修改该随机设备的 NAT 配置。不是个好主意。
  • 我通常使用 Windows System32 文件夹中的 Win32 库 wlanapi 库。源代码可从 www.pinvoke.net 获得。您所指的库对 wlinapi.dll 的调用与 pinvoke 中显示的相同。网络托管库没有实现所有 IP 协议,并且无法修改 c# 代码以添加缺少的协议。您要么需要在 c++ 中进行修改,要么调用 Window dll。

标签: c# port


【解决方案1】:

这是使用 from here https://csharp.hotexamples.com/en/examples/Open.Nat/NatDiscoverer/-/php-natdiscoverer-class-examples.html 的 NatDiscovers 示例

 public void OpenExternalPort(int privatePort, int publicPort, string description)
 {
     localHostPort = privatePort;
     var timeSpan = new TimeSpan(0, 0, 0, 30);
     var cancellationTokenSource = new CancellationTokenSource(timeSpan);
     natDiscoverer = new NatDiscoverer();
     natDevice = natDiscoverer
         .DiscoverDeviceAsync(PortMapper.Upnp, cancellationTokenSource)
         .IsCompleted();
     mapping = new Mapping(Protocol.Tcp, privatePort, publicPort, description);
     natDevice
         .CreatePortMapAsync(mapping)
         .IsCompleted();
 }

看起来像您的代码示例(但 new Mapping(Protocol.Tcp, privatePort, publicPort, description); 不像您的代码中那样包含一个零)。

那么,你真的了解这个问题吗?也许您不需要端口映射?或者您在系统的其他部分(如防火墙)有问题?您如何理解您的代码无法正常工作?

【讨论】:

  • 也许我很困惑,我不是要打开 nat,而是要转发路由器端口,这样库对我不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多