84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
认证高级PHP讲师
我感觉linux下的inet_ntoa打印子网掩码有问题,这段程序在Mac系统上可以正确输出。 我自己写了个函数,可以输出正确结果。
#include <iostream> #include <sys/socket.h> #include <arpa/inet.h> #include <ifaddrs.h> #include <sstream> using namespace std; string getip(const sockaddr_in* addr) { ostringstream s; int a = ntohl(addr->sin_addr.s_addr); s << ((a >> 24) & 0xFF) << '.' << ((a >> 16) & 0xFF) << '.' << ((a >> 8) & 0xFF) << '.' << (a & 0xFF); return s.str(); } int main(void) { struct ifaddrs* myaddrs; struct sockaddr_in *ss, *kk; char buf[100]; if (getifaddrs(&myaddrs) == 0) { for (struct ifaddrs* ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) { ss = (struct sockaddr_in*) ifa->ifa_addr; kk = (struct sockaddr_in*) ifa->ifa_netmask; if (ss->sin_family == AF_INET) cout << ifa->ifa_name << ":" << getip(ss) << " netmask:" << getip(kk) << endl; } } return 0; }
利用inet_ntop函数可以得到正确的结果
inet_ntop
我感觉linux下的inet_ntoa打印子网掩码有问题,这段程序在Mac系统上可以正确输出。
我自己写了个函数,可以输出正确结果。
利用
inet_ntop
函数可以得到正确的结果