认证高级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
函數可以得到正確的結果