如何获取以太网设备列表

我想要获得使用C程序的系统上的以太网设备列表。 在我的系统下面,我想获得eth0-9的列表,如果可能的话还有一些相关的属性(例如MAC地址,支持的最大速度)。

# ip link show | grep " eth" 3: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 5: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 6: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 7: eth4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 8: eth5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 14: eth6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 15: eth7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 16: eth8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 17: eth9: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 

在网上search,我发现代码示例如下:

 char buf[1024]; struct ifconf ifc; int sck; /* Get a socket handle. */ sck = socket(AF_INET, SOCK_DGRAM, 0); /* Query available interfaces. */ ifc.ifc_len = sizeof(buf); ifc.ifc_buf = buf; ioctl(sck, SIOCGIFCONF, &ifc); 

但是,上述代码仅检索分配了IP地址的eth设备列表。 我想获得一个IP地址是否分配给它的eth设备的完整列表。

我也在glibc中遇到以下函数:

struct if_nameindex * if_nameindex(void);

但是,上面的函数只返回eth设备索引和名称(如ethX),这是非常有限的信息。

有其他/更好的select。

为了清楚我的目标,我想从系统中获取eth设备列表,只select10G端口的eth设备。

谢谢艾哈迈德。

你正在寻找getifaddrs 。 手册页底部是一个示例程序,演示如何遍历所有接口。 您可以在联合函数或关联函数中使用if_nameindex , if_nametoindex , if_indextoname和if_freenameindex 。