Às vezes, encontro máquinas com interfaces de toque (por exemplo, quando o KVM está em execução). Como posso saber qual processo está anexado à interface TAP?
networking
kvm
tap
user368507
fonte
fonte
nmap
, mas não tenho certeza de como ser honesto.Respostas:
Isso me fez pensar e eu dei uma olhada na fonte do kernel do Linux (suponho que sua pergunta seja sobre o Linux).
Parece que a resposta é mais difícil do que você esperaria. Esta página de tutorial da API TUN / TAP oferece algumas dicas . Basicamente, seu programa aloca um novo dispositivo TUN / TAP abrindo
/dev/net/tun
e enviando oTUNSETIFF
ioctl
. Se tudo correr bem, uma interface é criada, o kernel fornece seu nome e um descritor de arquivo, e é assim que você o gerencia.Existem duas capturas aqui:
struct tun_struct
(o TUN e o TAP compartilham amplamente as mesmas estruturas de dados).Na prática, suspeito que 2 não aconteça muito. A verificação de um
openvpn
processo comlsof
revela que ele ainda tem seu descritor de arquivo para o dispositivo TAP aberto e obviamente o utiliza, mas como/dev/net/tun
é um tipo de dispositivo de multiplexação/dev/ptmx
, você pode usarlsof
para descobrir quais processos estão atualmente usando um dispositivo TUN / TAP, mas você não pode saber qual processo está usando qual dispositivo.Existem maneiras oblíquas de resolver o problema subjacente. Para o OpenVPN, eu uso um script de configuração de encapsulamento que nomeia os
tunX
/tapX
devices com um nome mais descritivo que inclui o nome base do arquivo de configuração do OpenVPN. Então,/etc/openvpn/foo.conf
leva a umvpn-foo
dispositivo. Então eu posso correlacionar o processo OpenvVPN com a interface que está usando. Ainda não tive que fazer isso com o QEmu / KVM.fonte
Cada descritor de arquivo possui uma entrada / proc / pid / fdinfo / num , como:
Portanto, com o nome da interface, você pode obter o pid com:
fonte
% sudo bash -c 'grep -l iff:.*vnet0 /proc/*/fdinfo/* 2>/dev/null | cut -d/ -f3'
4143
% pgrep qemu
4143
Dado o fato de haver um parâmetro de nome mostrado na saída dosps -ef
processos do qemu, por exemploqemu-system-x86_64 -enable-kvm -name debian-8
, deve ser fácil descobrir a qual VM um pid e uma interface correspondem.No FreeBSD ou em qualquer outro derivado do BSD:
deve mostrar qual processo está conectado à interface:
fonte
ifconfig
não mostra isso. Veja bem, esses sãotap
dispositivos criados pelo OpenVPN - embora eu não entenda por que deve haver uma diferença.