【问题标题】:IP address/MAC of a client客户端的 IP 地址/MAC
【发布时间】:2011-10-22 04:41:57
【问题描述】:

是否可以从sockaddr 获取客户端机器的IP 地址。

从客户端我是指用户连接到服务器的系统或浏览器。

我假设客户端在一些代理/路由器后面,并且没有直接连接到服务器。

【问题讨论】:

    标签: c client-server


    【解决方案1】:

    您可以获取服务器向其发送响应数据包的 IP 地址。通常这是客户端计算机的 IP 地址,但不一定是:

    • IPv4 NAT 设备(通常由公司网络使用)隐藏客户端的 IP 地址,而改为公开 NAT 设备的地址。
    • 6 到 4 翻译。如果客户端是纯 IPv6 本地客户端,您的 IPv4 服务器将看到提供 IPv4 连接的 6 对 4 网关的 IPv4 地址。
    • 客户端不直接连接到 Internet 的代理,而是连接到代表服务器执行请求的代理服务器。在这种情况下,服务器将看到代理服务器地址。

    如果您需要客户端计算机的 IP 地址,客户端必须将其作为数据发送到服务器。请注意,不能保证您通过这种方式收到的地址是真实的。即使是真的,也不能保证是唯一的(很多企业网络使用的192.168.X.X系列中的地址保留供内部使用)。您也不太可能无法通过其内部地址连接到客户端。

    【讨论】:

      【解决方案2】:

      检查同一问题的答案(如果我正确理解您的问题)Getting IPV4 address from a sockaddr structure

      socket.h 状态:

      int accept (int socket, struct sockaddr *address,
                                       socklen_t *address_len);
      

      address:空指针或指向将返回连接套接字地址的 sockaddr 结构的指针。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 1970-01-01
        • 2019-07-12
        • 2019-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多