如何识别 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) 后面工作