我正在尝试从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地址。感谢你的帮助,但
基尔
答案 0 :(得分:1)
试试这个:
clientSocket.getInetAddress().getHostName()
更新:或者,试试这个:
((InetSocketAddress)clientSocket.getRemoteSocketAddress()).getAddress().getHostName()
答案 1 :(得分:0)
我认为您不能在没有DNS的情况下获取域名,但您可以使用clientSocket中的getRemoteSocketAddress()方法获取客户端IP地址。
clientSocket.getRemoteSocketAddress();