【问题标题】:Get domain name of incoming connection获取传入连接的域名
【发布时间】:2013-11-17 23:35:35
【问题描述】:

我在互联网上没有找到有关此主题的任何信息,并在此处询问。例如,我有一个 IP 为 1.1.1.1 和 2.2.2.2 的服务器和两个指向它的域名 one.example.com 和 example2.net,并且 socke 在端口 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/域,我需要在纯套接字代码中执行此操作。接受 C++(主要)或 Java(或任何其他),我需要了解这方面的机制。

【问题讨论】:

  • Apache 知道正在寻址的域,因为它包含在 HTTP 标头中。你还没有说你在做什么,所以这可能不适合你。
  • 是的,我处理 HTTP,所以这个选项是我的。除了 Paweł Stawarz 的回答外,它还解决了我的问题。谢谢!

标签: java c++ sockets domain-name


【解决方案1】:

IP 存储在IP packet header 中,您可以从那里读取它。为了获得主机,您可能必须通过发送request(或使用function 为您完成)来询问DNS 服务器。你可以找到这两个问题的例子,甚至在this site

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2011-06-10
    • 2011-07-16
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多