我正在尝试获取用户从Socket连接到的域(例如test.somesite.com),这可能吗?我想要这样做的原因是根据用户来自何处重定向用户。我从另一个线程中运行serverSocket.accept()获得套接字

我努力了:

clientSocket.getLocalAddress().getHostAddress();
clientSocket.getHostAddress().toString();


它们都只打印我自己的本地/内部IP地址。我如何才能从中获得域名?

编辑:我认为这是可能的,因为例如在Apache Web服务器中,您可以在httpd.conf文件中执行此操作:

<VirtualHost *:80>
  ServerName something.something.com
  ProxyPass               /       http://localhost:8080/
  ProxyPassReverse        /       http://localhost:8080/
</VirtualHost>


这将在端口80上侦听,检查它们来自的url是否为something.something.com,如果重定向到80,则可能是完全错误的,因为我不熟悉Java网络,但是请允许我知道您是否有任何提示,即使我必须重写我的代码也可以。

编辑2:我发现这是不可能的,因为目标应用程序会在连接之前将域名解析为IP地址。谢谢你的帮助

基尔

最佳答案

尝试这个:

clientSocket.getInetAddress().getHostName()


更新:或者,尝试以下操作:

((InetSocketAddress)clientSocket.getRemoteSocketAddress()).getAddress().getHostName()

09-29 23:46