c# - C# - 使用 .Net Core 5.0 进行端口映射
问题描述
预期结果
我正在尝试使用 Kestrel 制作 ASP.NET Core 5.0 应用程序,并且我想自动端口转发服务器的端口。
包裹
我目前正在使用该OpenNat.Core
软件包。我也尝试过常规OpenNat
,并且出现了同样的问题。
问题
当端口转发时,程序说它已经正确映射了所有内容,并且当列出我的路由器上的所有映射端口时,地图甚至会显示出来。然而,当我尝试通过CanYouSeeMe.org查看其状态时,它返回超时错误,并且我无法访问网络外的服务器。
我试过的
- 我以为服务器启动后端口映射可能已经打开,所以我手动打开了端口,然后重新启动了 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);
}
}
解决方案
没关系我的防火墙阻止了应用程序。我能够动态添加防火墙规则来解决问题。
推荐阅读
- javascript - 不会崩溃且运行良好的文件夹
- spring - 在 Spring Cloud Stream 消息正文中找到的嵌入式标头
- amazon-web-services - Amazon Rekognition for Video - getFaceSearch:索引号
- sympy - 乳胶的圆括号(矩阵(…))
- logging - 如何在 Carte 上运行的 Pentaho Kettle Job 中为数据库日志连接名称使用变量?
- javascript - Chrome - 即使在使用“不安全内联”之后,仍然“由于 CSP 而拒绝加载脚本”
- javascript - 如何访问 ReactJS 中复选框的状态?
- c++ - 获取 streambuf/stringbuf 数据的所有权
- javascript - Highcharts饼图问题(饼片之间的差距)
- c# - 将授权持有者令牌添加到 ASP.NET Web 表单页面标题