语境
我想知道我们是否可以提取IP信息而不必使用gethostinfo或getnameinfo等...
我的代码的一部分
struct sockaddr in_addr;
socklen_t in_len;
int infd;
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
in_len = sizeof in_addr;
infd = accept( fd , &in_addr , &in_len );
题
我想以没有常规格式的数字获取客户端/传入IP(例如3232238637而不是192.168.12.45)。可能吗?
这些功能的来源令人不解,所以我不知道。
我读到in_addr(sockaddr)可能有我需要的信息。除了发现这些功能和结构的“内部”,没有特别的原因。
谢谢 !
最佳答案
对于IPv4:
struct sockaddr_in in_addr;
socklen_t in_len = sizeof in_addr;
int infd = accept(fd, (struct sockaddr*) &in_addr, &in_len);
// in_addr.sin_addr.s_addr contains the client's IP address
// as a 4-byte integer, in network byte order...
对于IPv6:
struct sockaddr_in6 in_addr;
socklen_t in_len = sizeof in_addr;
int infd = accept(fd, (struct sockaddr*) &in_addr, &in_len);
// in_addr.sin6_addr.s6_addr contains the client's IP address
// as a 16-byte array...