C# - .Net Core 5.0 的端口映射
C# - Port Mapping with .Net Core 5.0
预期结果
我正在尝试使用 Kestrel 创建一个 ASP.NET Core 5.0 应用程序,我想自动转发服务器的端口。
套餐
我目前正在使用 OpenNat.Core
package. I have also tried the regular OpenNat
并且出现了同样的问题。
问题
当端口转发时,程序说它已正确映射所有内容,甚至在列出我的路由器上的所有映射端口时也会显示该映射。然而,当我试图通过 CanYouSeeMe.org 查看它的状态时,它 returns 出现超时错误,我无法访问网络外的服务器。
我试过的
- 我想可能是服务器启动后端口映射一直在打开,所以我手动打开了端口,然后重启了Kestrel服务器。
- 我确定我的路由器支持 UPnP
- 我也有一个 Synology NAS,我从中转发,它工作得很好。
- 我有个朋友用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);
}
}
没关系,我的防火墙阻止了应用程序。我能够动态添加防火墙规则来解决问题。
预期结果
我正在尝试使用 Kestrel 创建一个 ASP.NET Core 5.0 应用程序,我想自动转发服务器的端口。
套餐
我目前正在使用 OpenNat.Core
package. I have also tried the regular OpenNat
并且出现了同样的问题。
问题
当端口转发时,程序说它已正确映射所有内容,甚至在列出我的路由器上的所有映射端口时也会显示该映射。然而,当我试图通过 CanYouSeeMe.org 查看它的状态时,它 returns 出现超时错误,我无法访问网络外的服务器。
我试过的
- 我想可能是服务器启动后端口映射一直在打开,所以我手动打开了端口,然后重启了Kestrel服务器。
- 我确定我的路由器支持 UPnP
- 我也有一个 Synology NAS,我从中转发,它工作得很好。
- 我有个朋友用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);
}
}
没关系,我的防火墙阻止了应用程序。我能够动态添加防火墙规则来解决问题。