Ubuntu

檢測網卡是否為Linux/bsd中的虛擬網卡(docker/veth/etc)

  • May 30, 2017

我在此頁面上看到了一些很好的解釋,用於在 ubuntu 中獲取有關網卡及其統計資訊的資訊。如頁面上所述,這給出了很好的輸出。我也嘗試閱讀其他文件,但找不到可以區分系統上真實網卡和虛擬網卡的標誌或類似內容。

有沒有辦法區分?謝謝。

檢查/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]);
       }
   }
}

引用自:https://serverfault.com/questions/852947