static void get_local_address() {
struct ifconf ifc;
char buf[4096];
int s, i;
if (-1 == (s = socket(AF_INET, SOCK_DGRAM, 0))) {
perror("socket");
exit(1);
}
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
if (0 > ioctl(s, SIOCGIFCONF, &ifc)) {
perror("SIOCGIFCONF");
exit(1);
}
if (ifc.ifc_len == sizeof(buf)) {
fprintf(stderr, "SIOCGIFCONF output too long");
exit(1);
}
for (i = 0; i < (int)(ifc.ifc_len/sizeof(ifc.ifc_req[0])); i++) {
strcpy(ip_addr,
inet_ntoa(((struct sockaddr_in *)(&ifc.ifc_req[i].ifr_addr))->sin_addr));
if (0 > ioctl(s, SIOCGIFFLAGS, &ifc.ifc_req[i])) {
perror("SIOCGIFFLAGS");
exit(1);
}
if (ifc.ifc_req[i].ifr_flags & IFF_LOOPBACK) {
// don't use loopback interfaces
continue;
}
if (0 > ioctl(s, SIOCGIFHWADDR, &ifc.ifc_req[i])) {
perror("SIOCGIFHWADDR");
exit(1);
}
sprintf(hw_addr, "%02x:%02x:%02x:%02x:%02x:%02x",
(unsigned char)ifc.ifc_req[i].ifr_hwaddr.sa_data[0],
(unsigned char)ifc.ifc_req[i].ifr_hwaddr.sa_data[1],
(unsigned char)ifc.ifc_req[i].ifr_hwaddr.sa_data[2],
(unsigned char)ifc.ifc_req[i].ifr_hwaddr.sa_data[3],
(unsigned char)ifc.ifc_req[i].ifr_hwaddr.sa_data[4],
(unsigned char)ifc.ifc_req[i].ifr_hwaddr.sa_data[5]);
break;
}
close(s);
}
liunx下获取本机IP地址实例代码
最新推荐文章于 2023-11-01 12:53:25 发布