【发布时间】:2012-05-30 00:39:06
【问题描述】:
我有一个用 java 编写的 2 路 SSL 客户端和服务器。问题是我的服务器需要能够找出客户端的主机名,并且该客户端位于 NAT 网关或代理后面。我努力了: clientSocket.getRemoteSocketAddress(), clientSocket.getInetAddress().getCanonicalHostName(), clientSocket.getInetAddress().getHostAddress(),
其中 clientSocket 的类型是 SSLSocket 并且它们都不起作用,它们只是给了我一个公共 IP 地址。有没有办法让我获取连接到服务器的客户端的实际主机名?
【问题讨论】:
-
有一个迂回的解决方案,如果您拥有应用层协议的所有权。端点地址可以作为信息头发送,作为服务器和客户端之间应用层握手的一部分。这显然取决于您是服务器/客户端的开发人员。这个概念的一个很好的例子是 HTTP,请求标头是
X-Forwarded-For,它是用户通过代理发送有关最终客户端的信息(格式为X-Forwarded-For: client1, proxy1, proxy2等的数据)。