来自 C# 的端口转发

Posted

技术标签:

【中文标题】来自 C# 的端口转发【英文标题】:Port forwarding from C# 【发布时间】:2013-03-14 22:17:04 【问题描述】:

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

【问题讨论】:

查看 UPnP:en.wikipedia.org/wiki/Universal_Plug_and_Play 应该有可用的 C# UPnP 库。 【参考方案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/…

以上是关于来自 C# 的端口转发的主要内容,如果未能解决你的问题,请参考以下文章

来自本地 kubernetes 集群的 Keycloak 端口转发

curl: (52) 来自服务器的空回复通过 ssh 端口转发

.NET 端口转发问题

端口转发 (NAT UPNP) 错误

lcx端口转发 linux版

动态端口转发 libssh C