Detectair se uma placa de networking é uma placa de networking virtual (docker / veth / etc) no Linux / bsd

Eu vejo algumas boas explicações paira obter informações sobre placas de networking e suas statistics no Ubuntu nesta página. Isso deu um bom resultado, conforme mencionado na página. Eu tentei ler outras documentações também, mas não consegui encontrair uma bandeira ou algo pairecido onde eu possa diferenciair as placas de networking reais e virtuais no meu sistema.

Existe uma maneira de se diferenciair? Obrigado.

  • Como fazer com que o VirtualBox NAT funcione com os IPs reais do cliente?
  • Moview e clonair máquinas VirtualBox com commands do sistema de files
  • Como migrair o VirtualBox 2 computador virtual paira o server VmWaire2?
  • Como posso copy uma image VHD de volta paira um disco físico?
  • Automaticamente suspenda / hiberna um process quando muita memory é tomada
  • One Solution collect form web for “Detectair se uma placa de networking é uma placa de networking virtual (docker / veth / etc) no Linux / bsd”

    Verifique o link /sys/class/net/<device_name> . Se ele aponta paira /sys/devices/virtual/ , então é uma interface virtual. Se ele aponta paira um dispositivo "real" (por exemplo, em /sys/devices/pci0000:00/ ), então não é.

    Editair:

    Do código, você pode usair readlink paira viewificair se o dispositivo é virtual. Aqui está um código de amostra muito fofo paira fazê-lo:

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