c# -端口映射与.net Core 5.0



预期结果

我正在尝试做一个ASP。. NET Core 5.0应用程序使用Kestrel,我想自动端口转发服务器的端口。

我目前使用的是OpenNat.Core包。我也尝试了常规的OpenNat,也出现了同样的问题。

当端口转发时,程序说它已经正确地映射了所有内容,并且当列出我路由器上所有映射的端口时,映射甚至显示出来。然而,当我试图通过CanYouSeeMe.org查看其状态时,它返回一个超时错误,我无法访问网络外的服务器。

What I've try

  1. 我认为端口映射可能在服务器启动后已经打开,所以我手动打开端口,然后重新启动Kestrel服务器。
  2. 我确定我的路由器支持UPnP
    • 我也有一个Synology NAS,我端口转发,它工作得很好。
  3. 我有一个朋友使用ZenMap检查端口。
    • 端口显示它被过滤了,但没有打开(并且没有指定服务)。

代码
using Open.Nat;
using System;
using System.Threading;
using System.Threading.Tasks;
...
public static async Task OpenPort(int port, string description)
{
try
{

NatDiscoverer discoverer = new NatDiscoverer();
CancellationTokenSource cts = new CancellationTokenSource(10000);
NatDevice device = await discoverer.DiscoverDeviceAsync(PortMapper.Upnp, cts);
Mapping map = new(Protocol.Tcp, port, port, description);
await device.CreatePortMapAsync(map);
Console.WriteLine($"Created {map}");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
}

没关系,我的防火墙阻止了应用程序。我可以动态地添加一个防火墙规则来解决这个问题。

最新更新