2011-06-02 62 views
1

一般在任何非HTTP服务器上。有没有办法来检测使用哪个域名来访问IP?获取域服务器已达到?

我知道HTTP服务器获取请求标头中传递的域名,但是这对于不需要从客户端收到此信息的任何其他服务器是可能的吗?

我特别想找到一种方法来与Minecraft服务器(Bukkit)做到这一点,所以我的首选语言(如果您需要回答)将是Java。但我不想具体说这种语言的理论。

回答

3

一般来说,不,这就是为什么HTTP协议将它包含在标题中的原因。

为了到达您的服务器,首先执行DNS查找来解析您的IP,然后再连接本身。这两个步骤是分开的,很难链接在一起。

记录客户端最后一次请求的域名也很棘手,因为DNS信息经常被缓存,所以DNS请求在被回答之前甚至可能不会到达您的DNS服务器。

如果没有被缓存,它通常不会被最终客户端直接查找,而是被ISP操作的缓存DNS服务器查找。

+0

作为一种解决方法,您可以为您的服务器获取多个IP地址,并为每个IP地址分配不同的DNS名称。然后,您的服务器可以通过检查本地套接字的IP地址(Java中的'Socket.getLocalAddress()')来确定使用了哪个名称。 – caf 2011-06-06 05:35:07

+0

我问这只是因为我不想租用多个IP,但感谢您的输入。 :) – 2011-06-07 09:29:51

0

否。获取用于连接到服务器的DNS名称的唯一方法是让客户端提供它。

0

不,如果协议本身没有像HTTP中的主机头那样的手段,那么您无法找出客户端上使用哪个主机名来解析您的IP地址。