Gagan93 Asked: 2017-05-30 23:10:51 +0800 CST2017-05-30 23:10:51 +0800 CST 2017-05-30 23:10:51 +0800 CST 检测网卡是否为Linux/bsd中的虚拟网卡(docker/veth/etc) 772 我在此页面上看到了一些很好的解释,用于在 ubuntu 中获取有关网卡及其统计信息的信息。如页面上所述,这给出了很好的输出。我也尝试阅读其他文档,但找不到可以区分系统上真实网卡和虚拟网卡的标志或类似内容。 有没有办法区分?谢谢。 ubuntu 1 个回答 Voted Best Answer Lacek 2017-05-30T23:38:51+08:002017-05-30T23:38:51+08:00 检查/sys/class/net/<device_name>符号链接。如果它指向/sys/devices/virtual/,那么它是一个虚拟接口。如果它指向一个“真实的”设备(例如 into /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]); } } }
检查
/sys/class/net/<device_name>
符号链接。如果它指向/sys/devices/virtual/
,那么它是一个虚拟接口。如果它指向一个“真实的”设备(例如 into/sys/devices/pci0000:00/
),那么它不是。编辑:
从代码中,您可以使用
readlink
来检查设备是否是虚拟的。这是一个非常虚拟的示例代码: