客户端的IP地址/ MAC

时间:2011-08-08 08:05:26

标签: c client-server

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

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

我认为客户端位于一些代理/路由器后面,并没有直接连接到服务器。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

socket.h州:

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

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