首页 > 解决方案 > C# - 使用 .Net Core 5.0 进行端口映射

问题描述

预期结果

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

包裹

我目前正在使用该OpenNat.Core软件包。我也尝试过常规OpenNat,并且出现了同样的问题。

问题

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

我试过的

  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);
            }
        }

标签: c#.netnetworkingupnpasp.net-core-5.0

解决方案


没关系我的防火墙阻止了应用程序。我能够动态添加防火墙规则来解决问题。


推荐阅读