【问题标题】:Port forwarding from C#来自 C# 的端口转发
【发布时间】:2024-01-09 11:43:01
【问题描述】:

我想用 C# 编写一个程序,将特定端口从路由器转发到计算机。这可能吗?

【问题讨论】:

标签: c# udp port router


【解决方案1】:

不,不可能

端口转发是网络设备连接网络中所有其他计算机的任务。一旦数据包离开路由器,它就无法控制它。

此外,除非您从路由器转发端口,否则内部局域网中的计算机无法获取该数据包,并且根本不存在转发问题。

【讨论】:

  • 有可能。你检查过 uPnP 吗?
  • @Bart Friederichs uPnP 不是端口转发,它是一种不同的技术。
  • UPnP 也支持端口转发请求。
  • 您好,感谢您的回复,我的项目需要通过 UDP 通过端口外部连接到特定计算机,因此用户必须手动启用端口转发到计算机。但是我希望这可以在程序中自动完成,这可能吗?
  • @MurtuzaKabul 关于端口转发不正确:en.wikipedia.org/wiki/Universal_Plug_and_Play#NAT_traversal 关于支持,是的,这可能是一件事。
【解决方案2】:

可以使用 NATUPnP 1.0 类型库 (NATUPNP.DLL) 或第三方库(如 Mono.Nat)使用 UPNP(假设您的设备支持该技术)转发端口。

如果您想在没有 UPNP 的情况下执行此操作,那么这将相当困难,因为您需要找到需要发送到设备(路由器)的消息类型以模拟用户添加端口。

对于Mono.Nat,您可以在UPNP port forwarding – The easy way 找到一个示例 对于NATUPnP.NET Framework: Communicate through NAT Router via UPnP (Universal Plug and Play) 有一个示例

【讨论】:

  • 感谢您的详细回复,实际上应用程序类似于SERVER(在网络A上),连接到CLIENT1(在网络B上),发送数据包并结束UDP。 UPNP 是否适用?
  • 是的,假设客户端的设备支持 UPNP(现在大多数设备都支持,但总有例外)。
  • 好吧,请允许我这样问,我的服务器要通过udp远程发送数据包,它会被客户端的路由器阻止吗?如果是这样,我应该如何绕过它?
  • 如果客户端在防火墙后面,那么它将被阻止。为了绕过它,您需要确保从服务器发送信息的端口在客户端计算机上是打开的。此外,对于 UDP,还有另一种称为“UDP 打孔”的方法,如果您对第三个选项感兴趣,可以在此处找到有关它的一些额外信息*.com/questions/9140450/…