Saya kadang-kadang datang dengan mesin dengan antarmuka tap (misalnya, ketika KVM sedang berjalan). Bagaimana saya bisa tahu proses mana yang dilampirkan ke antarmuka TAP?
networking
kvm
tap
pengguna368507
sumber
sumber
nmap
, tetapi saya tidak yakin bagaimana harus jujur.Jawaban:
Ini membuat saya bertanya-tanya dan saya melihat sumber kernel Linux (saya berasumsi pertanyaan Anda adalah tentang Linux).
Tampaknya jawabannya lebih sulit daripada yang Anda harapkan. Ini TUN / TAP API tutorial penawaran halaman beberapa wawasan . Pada dasarnya, program Anda mengalokasikan perangkat TUN / TAP baru dengan membuka
/dev/net/tun
dan mengirimkannyaTUNSETIFF
ioctl
. Jika semuanya berjalan dengan baik, sebuah antarmuka dibuat, kernel memberi Anda nama dan deskriptor file, dan itulah cara Anda mengelolanya.Ada dua tangkapan di sini:
struct tun_struct
(TUN dan TAP sebagian besar berbagi struktur data yang sama).Dalam praktiknya, saya kira 2 tidak banyak terjadi. Memeriksa suatu
openvpn
proses denganlsof
mengungkapkan masih ada deskriptor file ke perangkat TAP terbuka dan jelas menggunakannya, tetapi karena/dev/net/tun
semacam perangkat multiplexing seperti/dev/ptmx
, Anda dapat menggunakanlsof
untuk mengetahui proses apa yang saat ini menggunakan perangkat TUN / TAP, tetapi Anda tidak dapat mengetahui proses apa yang menggunakan perangkat apa.Ada cara miring untuk memecahkan masalah yang mendasarinya. Untuk OpenVPN, saya menggunakan skrip pengaturan terowongan yang menamai
tunX
/tapX
perangkat dengan nama yang lebih deskriptif yang menyertakan nama file file konfigurasi OpenVPN. Jadi,/etc/openvpn/foo.conf
mengarah kevpn-foo
perangkat. Lalu saya bisa menghubungkan proses OpenvVPN dengan antarmuka yang digunakannya. Namun, saya belum harus melakukan ini dengan QEmu / KVM.sumber
Setiap deskriptor file memiliki entri / proc / pid / fdinfo / num , seperti:
Jadi, dengan nama antarmuka, Anda bisa mendapatkan pid dengan:
sumber
% sudo bash -c 'grep -l iff:.*vnet0 /proc/*/fdinfo/* 2>/dev/null | cut -d/ -f3'
4143
% pgrep qemu
4143
Mengingat fakta bahwa ada parameter nama yang ditampilkan dalam outputps -ef
untuk proses qemu, misalnyaqemu-system-x86_64 -enable-kvm -name debian-8
, seharusnya mudah untuk menemukan VM mana yang sesuai dengan pid dan antarmuka.Pada FreeBSD atau turunan BSD lainnya:
akan menunjukkan kepada Anda proses mana yang terhubung ke antarmuka:
sumber
ifconfig
tidak menunjukkan ini. Pikiran Anda, ini adalahtap
perangkat yang dibuat oleh OpenVPN - meskipun saya tidak melihat mengapa harus ada perbedaan.