从Socket获取域名

时间:2013-04-21 16:19:33

标签: java sockets networking

我正在尝试从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地址。感谢你的帮助,但

基尔

2 个答案:

答案 0 :(得分:1)

试试这个:

clientSocket.getInetAddress().getHostName()

更新:或者,试试这个:

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

答案 1 :(得分:0)

我认为您不能在没有DNS的情况下获取域名,但您可以使用clientSocket中的getRemoteSocketAddress()方法获取客户端IP地址。

clientSocket.getRemoteSocketAddress();