学堂 学堂 学堂公众号手机端

108-网络接口

lewis 1年前 (2024-04-29) 阅读数 20 #技术


1. 接口

网卡,是让计算机通向外部世界的一扇大门。但是在计算机的世界里,一般这扇门称为“接口(Interface)”。接口是物理意义上的设备。

在 Linux/Unix 中,我们使用 ​​ifconfig​​ 命令来查看接口信息:




图1 接口信息


接口通常都有自己的属性,比如在图1 中我们可以看到:

有自己的名字,比如 ens33, lo, virbr0.有一些标志位,比如 UP, BROADCAST, RUNNING, MULTICAST 等等。有 ip 地址,子网掩码,广播地址有物理地址,比如 ether 00:0c:29:03:40:40…2. 接口名称与接口索引号

每个接口都有自己的名字,比如图 1 中三个接口名字分别是 ens33, lo, virbr0.

除了 ifconfig 中列举的属性外,接口还有自己的编号,也称为接口索引号(interface index)

程序 if_nametoindex 能帮我们根据接口名字查看接口对应的索引号:



图2 查看接口的索引号。


程序位于路径​​unp/program/test/interface​​下.

程序 if_indextoname 能帮我们根据接口索引号查看接口对应的名字:



图3 查看接口名称


从图 3 可以看到,接口 0 是不存在的。写程序的时候,通常用 0 来表示不存在的接口。

3. 相关函数

图 2 和图 3 中的程序就是使用下面这两个函数实现的,使用起来相当简单。当然代码我就不贴出来了,你可以自己去 ​​unp/program/test/interface​​ 路径下查看源代码。

unsigned int if_nametoindex(const char *ifname);
char *if_indextoname(unsigned int ifindex, char

还有一对函数(第二个用是释放资源的),主要用来:

struct if_nameindex *if_nameindex(void);
void if_freenameindex(struct if_nameindex *ptr);

其中 struct if_nameindex 至少包含两个成员:

struct if_nameindex {
unsigned int if_index;
char *if_name;
// 其它成员

if_nameindex 函数返回一个数组,该数组最后一个元素是 NULL.

4.总结掌握接口的基本概念接口名称和接口索引


版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门