บางครั้งฉันก็พบกับเครื่องด้วยการเชื่อมต่อแบบแตะ (เช่นเมื่อ KVM กำลังทำงาน) ฉันจะรู้ได้อย่างไรว่ากระบวนการใดที่ต่อกับอินเตอร์เฟส TAP?
บางครั้งฉันก็พบกับเครื่องด้วยการเชื่อมต่อแบบแตะ (เช่นเมื่อ KVM กำลังทำงาน) ฉันจะรู้ได้อย่างไรว่ากระบวนการใดที่ต่อกับอินเตอร์เฟส TAP?
คำตอบ:
สิ่งนี้ทำให้ฉันสงสัยและฉันได้ดูที่แหล่งเคอร์เนล Linux (ฉันสมมติว่าคำถามของคุณเกี่ยวกับ Linux)
ดูเหมือนคำตอบจะยากกว่าที่คุณคาดไว้ นี้TUN / TAP หน้า API กวดวิชามีความเข้าใจบางอย่าง โดยทั่วไปโปรแกรมของคุณจัดสรรอุปกรณ์ TUN / TAP ใหม่โดยการเปิดและการส่งมัน/dev/net/tun
TUNSETIFF
ioctl
หากทุกอย่างเป็นไปด้วยดีอินเทอร์เฟซจะถูกสร้างขึ้นเคอร์เนลจะให้ชื่อและตัวอธิบายไฟล์ของคุณและนั่นคือวิธีที่คุณจัดการ
ที่นี่มีสองจับ:
struct tun_struct
(TUN และ TAP ส่วนใหญ่ใช้โครงสร้างข้อมูลเดียวกันร่วมกัน)ในทางปฏิบัติฉันสงสัยว่า 2 ไม่ได้เกิดขึ้นมาก การตรวจสอบopenvpn
กระบวนการด้วยการlsof
เปิดเผยยังคงมีตัวอธิบายไฟล์ของมันไปยังอุปกรณ์ TAP ที่เปิดอยู่และใช้งานอย่างเห็นได้ชัด แต่เนื่องจาก/dev/net/tun
เป็นอุปกรณ์มัลติเพล็กซิ่งเช่น/dev/ptmx
คุณสามารถใช้lsof
เพื่อค้นหาว่ากระบวนการใดกำลังใช้อุปกรณ์ TUN / TAP คุณไม่สามารถรู้ได้ว่ากระบวนการใช้อุปกรณ์อะไร
มีวิธีการเอียงในการแก้ปัญหาพื้นฐาน สำหรับ OpenVPN ฉันใช้สคริปต์การตั้งค่าช่องสัญญาณที่ตั้งชื่อtunX
/ tapX
อุปกรณ์ด้วยชื่อที่มีความหมายมากกว่าซึ่งรวมถึงชื่อไฟล์พื้นฐานของไฟล์กำหนดค่า OpenVPN ดังนั้น/etc/openvpn/foo.conf
นำไปสู่vpn-foo
อุปกรณ์ จากนั้นฉันสามารถเชื่อมโยงกระบวนการ OpenvVPN กับอินเทอร์เฟซที่ใช้งานอยู่ แม้ว่ายังไม่ได้ทำเช่นนี้กับ QEmu / KVM
ไฟล์ descriptor แต่ละไฟล์มีรายการ / proc / pid / fdinfo / numเช่น:
# cat /proc/24332/fdinfo/28
pos: 0
flags: 0104002
mnt_id: 18
iff: tap0123acdc-66
ดังนั้นด้วยชื่ออินเตอร์เฟสคุณสามารถรับ pid ด้วย:
# 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
เนื่องจากความจริงที่ว่ามีพารามิเตอร์ชื่อที่แสดงในผลลัพธ์ของps -ef
กระบวนการ qemu เช่นqemu-system-x86_64 -enable-kvm -name debian-8
มันควรจะง่ายต่อการค้นหาซึ่ง VM pid และอินเตอร์เฟซที่สอดคล้องกับ
บน FreeBSD หรืออนุพันธ์ BSD อื่น ๆ :
ifconfig tap0
ควรแสดงกระบวนการที่เชื่อมต่อกับอินเทอร์เฟซ:
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
ไม่แสดงสิ่งนี้ โปรดทราบว่าtap
อุปกรณ์เหล่านี้สร้างโดย OpenVPN - แม้ว่าฉันจะไม่เห็นเหตุผลที่ควรมีความแตกต่าง
nmap
แต่ฉันไม่แน่ใจว่าจะซื่อสัตย์อย่างไร