【问题标题】:Getting the hostname of an SSL client behind a NAT gateway or proxy using java使用 java 获取 NAT 网关或代理后面的 SSL 客户端的主机名
【发布时间】: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 等的数据)。

标签: java nat


【解决方案1】:

不是来自套接字。如果远程主机位于 NAT 防火墙后面,那么根据定义,它的主机名和 IP 地址对您是不可见的。您可以看到的只有公共 IP 和主机名。

但是,您可以在远程端执行hostname 命令,并通过 SSh 连接将输出传回。您取回的数据将仅与远程主机的配置一样好。无法保证您返回的内容与其内部 DNS 主机名或其他任何内容相匹配。

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多