我想在本地网络中找到eth0的IP地址(如果电缆已插入)或者返回环回IP(127.0.0.1)。所以,我尝试了以下代码:
struct in_addr getCurrentIP() {
int fd=0;
struct ifreq ifr;
struct in_addr IP;
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) {
perror("SIOCGIFFLAGS");}
if ((ifr.ifr_flags & IFF_UP)){
ioctl(fd, SIOCGIFADDR, &ifr);
close(fd);
IP = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
} else {
close(fd);
inet_aton ("127.0.0.1",&IP);
}
return IP;
}
此代码正常工作,直到我插入以太网电缆。然后,它返回任意IP 。
PS我连接到提供动态IP的网络(即使用DHCP)。
答案 0 :(得分:0)
我解决了,这是解决方案:
struct in_addr getCurrentIP() {
int fd=0;
struct ifreq ifr;
struct in_addr IP;
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) {
perror("SIOCGIFFLAGS");}
if ((ifr.ifr_flags & IFF_UP) && (ifr.ifr_flags & IFF_RUNNING)){
ioctl(fd, SIOCGIFADDR, &ifr);
close(fd);
IP = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
} else {
close(fd);
inet_aton ("127.0.0.1",&IP);
}
return IP;
}
我想感谢你的帮助。