Je tombe parfois sur une machine avec des interfaces de prise (par exemple, lorsque KVM est en cours d'exécution). Comment savoir quel processus est associé à l'interface TAP?
networking
kvm
tap
user368507
la source
la source
nmap
, mais je ne sais pas comment être honnête.Réponses:
Cela m'a fait réfléchir et j'ai jeté un œil à la source du noyau Linux (je suppose que votre question concerne Linux).
Il semble que la réponse soit plus difficile que vous ne le pensez. Cette page de didacticiel sur l'API TUN / TAP offre un aperçu . Fondamentalement, votre programme alloue un nouveau périphérique TUN / TAP en l'ouvrant
/dev/net/tun
et en l'envoyantTUNSETIFF
ioctl
. Si tout se passe bien, une interface est créée, le noyau vous donne son nom et un descripteur de fichier, et c'est comme ça que vous le gérez.Il y a deux captures ici:
struct tun_struct
(TUN et TAP partagent en grande partie les mêmes structures de données).En pratique, je soupçonne que 2 ne se produit pas beaucoup. Vérifier un
openvpn
processus aveclsof
révèle qu'il a toujours son descripteur de fichier sur le périphérique TAP ouvert et l'utilise évidemment, mais comme/dev/net/tun
c'est une sorte de périphérique de multiplexage/dev/ptmx
, vous pouvez utiliserlsof
pour savoir quels processus utilisent actuellement un périphérique TUN / TAP, mais vous ne pouvez pas savoir quel processus utilise quel appareil.Il existe des moyens indirects de résoudre le problème sous-jacent. Pour OpenVPN, j'utilise un script de configuration de tunnel qui nomme les périphériques
tunX
/tapX
avec un nom plus descriptif qui inclut le nom de base du fichier de configuration OpenVPN. Donc,/etc/openvpn/foo.conf
conduit à unvpn-foo
appareil. Ensuite, je peux corréler le processus OpenvVPN avec l'interface qu'il utilise. Cependant, je n'ai pas encore eu à le faire avec QEmu / KVM.la source
Chaque descripteur de fichier a une entrée / proc / pid / fdinfo / num , comme:
Ainsi, avec le nom de l'interface, vous pouvez obtenir le pid avec:
la source
% sudo bash -c 'grep -l iff:.*vnet0 /proc/*/fdinfo/* 2>/dev/null | cut -d/ -f3'
4143
% pgrep qemu
4143
donné qu'il y a un paramètre de nom affiché dans la sortie deps -ef
pour les processus qemu, par exemple,qemu-system-x86_64 -enable-kvm -name debian-8
il devrait être facile de savoir à quelle VM un pid et une interface correspondent.Sur FreeBSD ou tout autre dérivé BSD:
devrait vous montrer quel processus est connecté à l'interface:
la source
ifconfig
ne le montre pas. Attention, ce sont destap
appareils créés par OpenVPN - même si je ne vois pas pourquoi il devrait y avoir une différence.