找到不运行的网络接口

时间:2011-02-10 18:21:31

标签: c linux networking

如果我运行以下代码,它只会打印处于RUNNING状态的接口。有没有办法获得一个非RUNNING的接口列表,可以是UP还是DOWN?

int main()
{
    struct ifreq *pIfr;
    struct ifconf ifc;
    char buf[1024];
    int s, i, j;

    s = socket(AF_INET, SOCK_DGRAM, 0);
    if (s==-1)
        return -1;

    ifc.ifc_len = sizeof(buf);
    ifc.ifc_buf = buf;
    ioctl(s, SIOCGIFCONF, &ifc);

    pIfr = ifc.ifc_req;
    for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; pIfr++) {
        printf("name=%s\n", pIfr->ifr_name);
    }
    close(s);
    return 0;
}
~           

2 个答案:

答案 0 :(得分:2)

check man netdevice - “内核使用当前正在运行的所有L3接口地址填充ifreq:”

如果接口没有运行,

地址定义不明确......但你可以得到名字:

“没有地址或没有设置IFF_RUNNING标志的接口名称可以通过/ proc / net / dev找到。”

答案 1 :(得分:1)

看起来像SIOCGIFNAME的ioctl循环返回所有接口。输入是索引,调用返回接口名称。