0
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函数将获取en0, en1, lo0, ...etc 的接口,但我只想将其缩小到en1. 所以,我有上述算法,但缺少一些东西。任何人都有任何改进上述内容的输入,因此可以找到 en1 的 IP 地址。

4

1 回答 1

0

Something like this:

#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);
于 2013-10-03T06:29:47.720 回答