struct ifaddrs *addrs, *temp_addr;
int result;

result=getifaddrs(&addrs);
if(result != 0) {
    perror("getifaddrs");
}
else { // successful
    temp_addr=addrs;
    while(temp_addr != NULL) {
        if(strcmp(temp_addr->ifa_name, "en1") == 0) {

        }  //if en1
    }   //while loop
}


getifaddrs函数将获取en0en1lo0,... etc的接口,但我只想将其范围缩小到en1的IP地址。因此,我有上述算法,但是缺少了一些东西。任何人都可以通过任何输入来改进上述内容,以便可以找到en1的IP地址。

最佳答案

像这样:

#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#include <ifaddrs.h>

struct ifaddrs *ifaddr, *ifa;
int family;

if (getifaddrs(&ifaddr) == -1) {
    perror("getifaddrs");
    exit(EXIT_FAILURE);
}
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
    if (ifa->ifa_addr == NULL)
        continue;
    family = ifa->ifa_addr->sa_family;
    if (0 == strcmp(ifa->ifa_name,"en1" ) && (family == AF_INET)) { // v4
         // en1
    }
}

freeifaddrs(ifaddr);

关于c - 查找无线en1的IP地址的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19152072/

10-10 17:32