如何识别 NAT 后面的服务器 Socket 端口

Posted

技术标签:

【中文标题】如何识别 NAT 后面的服务器 Socket 端口【英文标题】:How to identify Server Socket port behind NAT 【发布时间】:2013-01-09 19:15:32 【问题描述】:

我的 PC_1 中有一个服务器套接字等待接受。 PC_2 想要连接该服务器套接字。但是 PC_1 和 PC_2 在 NAT 之后。所以PC_2不知道PC_1监听的真正端口是什么。我想要一种机制来识别这个服务器套接字外部端口。 我不想在路由器 (NAT) 上转发​​我的端口。我知道这可以通过 TCP 打孔来完成。但是我没有找到从服务器套接字发送数据包的方法。那么我可以做到这一点的方法是什么。谢谢!

【问题讨论】:

是 TCP 吗?还是 UDP 也行? 如果您的路由器支持 UPnP,您应该查看一些用于 Java 的 UPnP 库 @Aniket 是的,它是 TCP。不是 UDP。 我从未见过任何可能的 TCP 打孔实现,在我看来,虽然理论上可行,但有其实际问题 我刚刚阅读了关于 TCP 打孔的 Wikipedia 文章。我现在感觉有点不舒服。你绝对不能在纯 Java 中做到这一点。它不支持序列号等黑客所需的原始 IP 数据包访问。 【参考方案1】:

我看到没有转发,但我不知道您的意思是手动还是通过编程。如果你不介意稍微编程,那么你应该看看Cling。

【讨论】:

以上是关于如何识别 NAT 后面的服务器 Socket 端口的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 NAT 的情况下连接路由器或防火墙后面的客户端 tcp 端口

如何在不需要任何重定向配置的情况下使 TCP 服务器在路由器 (NAT) 后面工作

如果您在防火墙后面的 NAT 上,如何使用 php xdebug?

什么时候需要转?对称 NAT 和端口限制 NAT

NAT 后面到 NAT 连接后面

获取NAT转换的IP和某些本地端口的端口