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 上侦听,检查它们来自的 url 是否是 something.something.com,如果是,它将重定向到端口 80。也许我完全错了,因为我是 Java 网络的新手,但请让我知道您是否有任何提示,即使我必须重写我的代码也可以。

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

凯尔

4

2 回答 2

1

尝试这个:

clientSocket.getInetAddress().getHostName()

更新:或者,试试这个:

((InetSocketAddress)clientSocket.getRemoteSocketAddress()).getAddress().getHostName()
于 2013-04-21T16:41:40.713 回答
0

我认为没有 DNS 就无法获取域,但可以使用 clientSocket 中的getRemoteSocketAddress()方法来获取客户端 IP 地址。

clientSocket.getRemoteSocketAddress();
于 2013-04-21T17:24:48.787 回答