Bazen musluk arayüzleri olan makineye gelirim (örneğin, KVM çalışırken). TAP arayüzüne hangi işlemin eklendiğini nasıl bilebilirim?
Bazen musluk arayüzleri olan makineye gelirim (örneğin, KVM çalışırken). TAP arayüzüne hangi işlemin eklendiğini nasıl bilebilirim?
Yanıtlar:
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/tun
gö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:
struct tun_struct
(TUN ve TAP büyük ölçüde aynı veri yapılarını paylaşır).Uygulamada, 2'nin çok fazla gerçekleşmediğinden şüpheleniyorum. Bir openvpn
işlemi kontrol lsof
etmek, 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/tun
bir ç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
/ tapX
aygı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.conf
bir vpn-foo
cihaza yol açar . Sonra OpenvVPN sürecini kullandığı arayüzle ilişkilendirebilirim. Yine de bunu QEmu / KVM ile yapmak zorunda kalmadım.
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
% 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-8
bir VM'nin ve bir arabirimin hangi VM'ye karşılık geldiğini bulmak kolay olmalıdır.
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
ifconfig
bunu göstermiyor. Unutmayın, bunlar tap
OpenVPN tarafından oluşturulan cihazlar - neden bir fark olması gerektiğini anlamıyorum.
nmap
, ama nasıl dürüst olacağından emin değilim.