2011-08-08 313 views
1

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

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

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

回答

3

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

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

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

0

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

socket.h状态:

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

地址:要么是空指针,或者一个指向的sockaddr结构,其中连接套接字的地址将被返回。