0

我正在使用部署在 Google AppEngine 上的 servlet 来响应客户端的远程端口号。HttpServletRequest.getRemoteAddr() 工作正常,但 getRemotePort() 返回 0?

端口 0 无效。我尝试过其他 IP 服务,它们告诉我正常的端口号(即 55046 或其他),但每次从浏览器或 Java 代码访问时,我的 servlet 都会返回 0。

我的最终目标是能够在查找收件人的地址和外部端口位置时告诉连接发起者,以便 TCP 打孔技术能够正常工作。

这是什么原因?如何获得实际的端口号(如果可能)?NAT 路由器不使用代理端口吗?

4

1 回答 1

0

我不确定为什么 getRemotePort 会返回 0,但是为了您的最终目标,知道客户端端口是无用的。为每个连接重新分配客户端端口。事实上,如果第一个连接使用 55046,则客户端端口的全部意义在于新连接使用不同且未使用的客户端端口号。

这使得配置防火墙策略漏洞的信息毫无用处。您将不需要客户端端口。您需要的是服务器端口、服务器地址以及可选的客户端地址(如果您只想允许从该客户端地址进行访问)。

于 2012-04-16T20:42:28.603 回答