Bir işlemin musluk arayüzüne bağlı olup olmadığını nasıl anlayabilirim?


9

Bazen musluk arayüzleri olan makineye gelirim (örneğin, KVM çalışırken). TAP arayüzüne hangi işlemin eklendiğini nasıl bilebilirim?


Bunu yapabileceğinden şüpheleniyorum nmap, ama nasıl dürüst olacağından emin değilim.
Alex Chamberlain

Yanıtlar:


2

Bu beni meraklandırdı ve Linux çekirdek kaynağına baktım (sorunuzun Linux ile ilgili olduğunu varsayıyorum).

Yanıtın beklediğinizden daha zor olduğu anlaşılıyor. Bu TUN / TAP API eğitim sayfası bazı bilgiler sunuyor . Temel olarak, programınız açıp /dev/net/tungöndererek yeni bir TUN / TAP cihazı ayırır TUNSETIFF ioctl. Her şey yolunda giderse, bir arayüz oluşturulur, çekirdek size adını ve bir dosya tanımlayıcı verir ve bu şekilde yönetirsiniz.

Burada iki yakalama var:

  1. Çekirdek, ioctl'i gönderen işlemin PID'sini saklamaz struct tun_struct(TUN ve TAP büyük ölçüde aynı veri yapılarını paylaşır).
  2. Bir işlem bir arabirimi kalıcı olarak işaretleyebilir, dosya tanımlayıcısını kapatabilir ve daha sonra normal bir ağ arabirimi olarak kullanabilir.

Uygulamada, 2'nin çok fazla gerçekleşmediğinden şüpheleniyorum. Bir openvpnişlemi kontrol lsofetmek, TAP cihazına dosya tanımlayıcısının hala açık olduğunu ve açıkça kullandığını ortaya koyuyor, ancak /dev/net/tunbir çeşit çoğullama cihazı olduğu için /dev/ptmx, lsofşu anda hangi işlemlerin bir TUN / TAP cihazı kullandığını bulmak için kullanabilirsiniz , ancak hangi işlemin hangi cihazı kullandığını bilemezsiniz.

Altta yatan sorunu çözmenin eğik yolları vardır. OpenVPN için, tunX/ tapXaygıtları OpenVPN yapılandırma dosyasının taban adını içeren daha açıklayıcı bir adla adlandıran bir tünel kurulum komut dosyası kullanıyorum. Yani, /etc/openvpn/foo.confbir vpn-foocihaza yol açar . Sonra OpenvVPN sürecini kullandığı arayüzle ilişkilendirebilirim. Yine de bunu QEmu / KVM ile yapmak zorunda kalmadım.


Tamam. Ben de "multiplexing" / dev / net / tun tam olarak hangi işlemin bir işlemin de eklendiğini bilmemizi engelleyeceğinden şüpheleniyordum.
user368507

5

Her dosya tanımlayıcısında / proc / pid / fdinfo / num girişi bulunur, örneğin:

# cat /proc/24332/fdinfo/28
pos:    0
flags:  0104002
mnt_id: 18
iff:    tap0123acdc-66

Böylece, arayüz adı ile pid'i şu şekilde alabilirsiniz:

# egrep -l iff:.*tap0123acdc-66 /proc/*/fdinfo/* 2>/dev/null|cut -d/ -f3
24332

Benim için çalışıyor: qemu işlemlerinin % sudo bash -c 'grep -l iff:.*vnet0 /proc/*/fdinfo/* 2>/dev/null | cut -d/ -f3' 4143 % pgrep qemu 4143 çıktısında gösterilen bir ad parametresi olduğu göz önüne alındığında ps -ef, örneğin qemu-system-x86_64 -enable-kvm -name debian-8bir VM'nin ve bir arabirimin hangi VM'ye karşılık geldiğini bulmak kolay olmalıdır.
Dmitrii S.10

1

FreeBSD veya başka herhangi bir BSD türevinde:

ifconfig tap0

hangi işlemin arabirime bağlı olduğunu göstermelidir:

tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=80000<LINKSTATE>
    ether 58:9c:fc:10:8f:2b
    groups: tap
    media: Ethernet autoselect
    status: active
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    Opened by PID 2672

Bunu hangi işletim sistemi ve sürüm üzerinde deniyorsunuz? Bu bilgilere sahip olmak ÇOK kullanışlı olurdu (düzinelerce VPN uç noktasına sahip bir kutu çalıştırıyorum), ancak Debian ifconfigbunu göstermiyor. Unutmayın, bunlar tapOpenVPN tarafından oluşturulan cihazlar - neden bir fark olması gerektiğini anlamıyorum.
Alexios

Bu FreeBSD veya başka bir BSD türevi ile ilgilidir.
kworr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.