【socket】获取客户端IP

来源:互联网 发布:12口网络配线架 编辑:程序博客网 时间:2024/06/05 04:08

from:http://blog.sunshow.net/2009/07/get-client-ip-from-socket/


有两种方法,一种是在accept的时候获取,一种是通过getpeername获取

#include <sys/socket.h>
 
int accept(int socketstruct sockaddr *restrict address,
       
socklen_t *restrict address_len);
 
int getpeername(int socketstruct sockaddr *restrict address,
       
socklen_t *restrict address_len);

两者区别主要在取IP的fd不一样,前者是在监听的fd,后者是在连接建立的fd

struct sockaddr_in addr;
socklen_t addr_len;
int32_t listen_fdsock_fd;
 
/* create listening port */
 
addr_len = sizeof(addr);
 
memset(&addr0addr_len);
sock_fd = accept(listen_fd(struct sockaddr *)&addr, &addr_len);
printf("%d\n"addr.sin_addr.s_addr);
 
memset(&addr0addr_len);
getpeername(sock_fd(struct sockaddr *)&addr, &addr_len);
printf("%d\n"addr.sin_addr.s_addr);

当然这种长整型格式的IP不一定是我们想要的,可以通过inet_ntoa转换

#include <arpa/inet.h>
 
in_addr_t inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);
printf("%s\n"inet_ntoa(addr));

原创粉丝点击