使用if_nameindex获取网口索引和名称

本文介绍Linux系统中网络接口的索引与名称之间的转换方法,包括如何使用if_nametoindex和if_indextoname函数进行转换,以及获取所有网络接口列表的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux中,每个网口都有唯一的名字和正值索引,索引号从1开始(并不是0),linux提供了4个接口用于索引和名称之间的映射,定义如下:

#include <net/if.h>
unsigned int if_nametoindex(const char *ifname);
作用:网口名称映射成网口索引
返回值:成功返回索引,失败返回0
char *if_indextoname(unsigned int ifindex, char *ifname);
作用:网口索引映射成名称
返回值:成功返回名字内存的指针,失败返回NULL
struct if_nameindex *if_nameindex(void);
作用:返回所有的名称索引结构体列表
返回值:成功返回非空指针,失败返回NULL
voif if_freenamrindex(struct if_nameindex *ptr);
作用:释放为了记录struct if_nameindex而创建的内存

例子:

#include <net/if.h>
#include <stdio.h>

int 
main(int argc, char **argv)
{
	char *if_name;
	int index;
	struct if_nameindex *if_list, *if_one;
	
	if_list = if_nameindex();

	index = 0;
	for ( ; ((struct if_nameindex *)(if_list + index))->if_index != 0; index++) {
		if_one = (struct if_nameindex *)(if_list + index);
		printf("%d : %s\n", if_one->if_index, if_one->if_name);
	}

	if_freenameindex(if_list);
	
	return 0;
}

执行结果,可以看到索引确实从1开始,并且顺序和ip addr show的结果一致:

[root@localhost if_nametoindex]# ./a.out
1 : lo
2 : ens33
3 : ens160
4 : ens192
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值