84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
认证高级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
函数可以得到正确的结果