获取传入连接的域名

时间:2013-11-17 23:35:36

标签: java c++ sockets domain-name

我在互联网上找不到关于此主题的任何信息,并在此处询问。例如,我有IP 1.1.1.1和2.2.2.2的服务器以及指向它的两个域名one.example.com和example2.net,并且在端口1234上监听传入连接。

例如:

C / C ++:

listenfd=socket(AF_INET, SOCK_STREAM, 0);
bind(...);
listen(...);
while(...) accept(...);

或Java:

ServerSocket socket = new ServerSocket(1234);
while(...) {
    Socket connectionSocket = welcomeSocket.accept();
    ...
}

当我的套接字上接受客户端时,我需要知道客户端使用哪个域名/ IP进行连接。它可能是one.example.com或example2.net和/或IP 1.1.1.1或2.2.2.2(如果仅使用IP连接)。

Apache以某种方式确定了传入请求的ip / domain,我需要在纯套接字代码中执行此类操作。接受C ++(main)或Java(或任何其他),我需要知道这个的机制。

1 个答案:

答案 0 :(得分:3)

IP存储在IP packet header内,您可以从那里读取。为了获得主机,您可能必须通过发送request(或使用function来为您提供DNS服务器)。您可以找到这两个问题的示例,即使在this site

上也是如此