在服务器端,获取客户端连接的服务器IP

时间:2017-08-29 08:55:22

标签: linux sockets

服务器有多个接口。服务器绑定到0.0.0.0,这意味着它正在侦听它拥有的所有接口。因此,客户端可以使用这些服务器IP中的任何一个进行连接。 因此,在服务器端如何获取客户端连接的IP。

2 个答案:

答案 0 :(得分:1)

getsockname()返回的套接字上使用accept(),它将绑定到服务器用于与接受的客户端通信的本地地址。

NAME
     getsockname — get socket name
LIBRARY
     Standard C Library (libc, -lc)
SYNOPSIS
     #include <sys/types.h>
     #include <sys/socket.h>

     int
     getsockname(int s, struct sockaddr * restrict name,
     socklen_t * restrict namelen);

DESCRIPTION
     The getsockname() system call returns the current name for the specified
     socket.  The namelen argument should be initialized to indicate the
     amount of space pointed to by name.  On return it contains the actual
     size of the name returned (in bytes).

答案 1 :(得分:0)

此信息可通过getsockname()电话获取。在服务器端调用时,它提供服务器accept编辑客户端的本地服务器地址。

请注意,这是一个被称为“弱端系统模型”的深奥的东西,这实际上意味着连接所接收的本地接口并不一定与所使用的IP地址相对应由客户端(想想当代理/路由器在客户端和服务器之间时会发生什么)。在这种情况下,您无法获得客户端实际connect编辑的实际IP(除非客户端在数据包中将其发送到服务器),只接受服务器上接受的IP客户。