如何获取本机的网卡信息
每个网络接口都有一个名称。一般由字母加数字组成。比如lo
(loopback interface), eth0
(Ethernet interface 网络接口)。下面是相关接口函数,使用时需要包含net/if.h
size_t IFNAMSIZ
常量- 指定最大的用于存储接口名称大的缓存大小。
unsigned int if_nametoindex(const char *ifname)
- 此函数用于通过网卡名称获取对应的索引号。
- ifname:网卡名称。
- return:失败返回0,成功返回网卡名称对应的索引号index.
char *if_indextoname(unsigned int ifindex, char *ifname)
- 此函数用于通过网卡索引号获取对应的网卡名称。
- ifindex:网卡索引号。
- ifname:用于存放获取到的网卡名buff指针.此buff必须为
IFNAMSIZ
大小。 - return:如果ifindex存在,返回ifname指针。否则返回NULL.
if_nameindex
结构体包含如下的成员struct if_nameindex{ unsigned int if_index;//索引号:1, 2, ... char *if_name; //网卡名称字符串:"eth0"等 };
struct if_nameindex *if_nameindex(void)
- 获取所有的网卡信息。然后返回一个if_nameindex结构的数组指针。(注意:这个数组是是此函数内部分配的,调用此函数后必须使用if_freenameindex()释放此数组)。
- return:返回所有网卡的信息数组指针。
- 下面是它的一个简单使用:
struct if_nameindex *pInfoTab = if_nameindex(); for(int i = 0; pInfoTab[i].if_index != 0; i++){ printf("[%2d]:%s\n",pInfoTab[i].if_index,pInfoTab[i].if_name); } if_freenameindex (pInfoTab);//释放分配的内存
void if_freenameindex(struct if_nameindex *ptr)
- 与if_nameindex()函数配套使用,用于释放if_nameindex()函数分配的内存。
关于技术交流
此处后的文字已经和题目内容无关,可以不看。
qq群:825695030
微信公众号:嵌入式的日常
如果上面的文章对你有用,欢迎打赏、点赞、评论。