2013-04-21 86 views
0

我想从一个套接字获取用户连接到的域(例如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,检查网址他们来自some.something.com,如果它是重定向到端口80.也许我是完全错误的,因为我是新来的Java网络,但请让我知道,如果你有任何提示,即使我有重写我的代码很好。

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

基尔

+0

你能举一个你期望的例子吗? – OscarRyz 2013-04-22 17:19:26

+0

我不认为Apache ServerName指令正在做你认为的事情。它用于通过使用客户端发送的主机头标识虚拟主机定义。请参阅http://httpd.apache.org/docs/2.2/mod/core.html#servername – 2013-04-22 19:35:36

回答

1

试试这个:

clientSocket.getInetAddress().getHostName() 

更新:另外,试试这个:

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

不,不显示他们通过连接的域。不过谢谢。我编辑了我原来的帖子来解释更多。 – 2013-04-22 17:15:56

+0

@iKeirNez:应该有效。 'Socket.getInetAddress()'为套接字的** remote **端点返回'InetAddress',然后'InetAddress.getHostName()'执行该IP的反向DNS查找以获取其主机名。你可以尝试使用'Socket.getRemoteSocketAddress()'来取代'InetAddress'。 – 2013-04-22 19:25:54

+0

更新也不起作用,我试图获取客户端连接到的域,而不是他们的主机名。基本上,如果客户端使用IP something.something.com连接到IP地址,我想找出他们加入的IP,在这种情况下something.something.com 编辑:我发现它不可能作为连接到它的客户端在连接之前将域解析为IP。感谢您的帮助,但 – 2013-04-23 17:18:43

0

我不认为你可以得到没有DNS的域名,但是你可以使用clientSocket的getRemoteSocketAddress()方法获取客户端IP地址。

clientSocket.getRemoteSocketAddress(); 
+0

不幸的是,这不是我要找的,但我编辑了我原来的帖子,更多的信息 – 2013-04-22 17:16:22

+0

尝试梳理我的答案与雷米的,应该做的伎俩。 – spoindl 2013-04-23 07:19:26