检测网卡是否是Linux / bsd中的虚拟网卡(docker / veth / etc)

我看到一些很好的解释,在这个页面上获取有关网卡和他们的统计信息在Ubuntu的。 这给了页面上提到的一个很好的输出。 我也尝试阅读其他文件,但无法find一个标志或类似的地方,我可以区分我的系统上的真实和虚拟网卡。

有没有办法区分? 谢谢。

检查/sys/class/net/<device_name>符号链接。 如果它指向/sys/devices/virtual/ ,那么它是一个虚拟接口。 如果它指向一个“真实的”设备(例如到/sys/devices/pci0000:00/ ),那么它不是。

编辑:

从代码中,您可以使用readlink来检查设备是否是虚拟的。 这是一个非常虚拟的示例代码:

 #include <fcntl.h> #include <unistd.h> #include <string.h> #include <stdio.h> int main(int argc, char **argv) { char theLink[128]; char thePath[128]; strcpy(thePath,"/sys/class/net/"); memset(theLink,0,128); if (argc>1) { strcat(thePath,argv[1]); } else { printf("Gimme device\n"); return 1; } if (readlink(thePath, theLink, 127)==-1) { perror(argv[1]); } else { if (strstr(theLink,"/virtual")) { printf("%s is a virtual device\n",argv[1]); } else { printf("%s is a physical device\n",argv[1]); } } }