首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取以太网设备列表

如何获取以太网设备列表
EN

Stack Overflow用户
提问于 2014-05-15 10:58:04
回答 1查看 1.4K关注 0票数 2

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

代码语言:javascript
复制
# 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

在网上搜索,我发现了类似于下面的代码示例:

代码语言:javascript
复制
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设备的列表。我想要获取eth设备的完整列表,无论是否为其分配了IP地址。

我还在glibc中遇到了以下函数:

struct if_nameindex *if_nameindex(空);

然而,上面的函数只返回设备索引和名称(就像在ethX中一样),这是非常有限的信息。

是否有其他/更好的选择。

为了明确我的目标,我希望从系统中获取eth设备的列表,并且只选择属于10G端口的eth设备。

谢谢你艾哈迈德

EN

回答 1

Stack Overflow用户

发布于 2014-05-15 11:18:44

您正在寻找getifaddrs。在手册页的底部是一个示例程序,它演示了如何遍历所有界面。您可以在连接或关联函数中使用if_nameindexif_nametoindexif_indextonameif_freenameindex

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23668484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档