ฉันต้องการจับภาพทราฟฟิกบนอินเตอร์เฟสเสมือนของ Linux เพื่อการดีบัก ฉันได้รับการทดสอบด้วยveth
, tun
และdummy
อินเตอร์เฟซประเภท; ในทั้งสามฉันมีปัญหาในการtcpdump
แสดงอะไร
นี่คือวิธีการตั้งค่าส่วนต่อประสานแบบจำลอง:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
ในเทอร์มินัลหนึ่งดูด้วยtcpdump
:
tcpdump -i dummy10
ในหนึ่งวินาทีให้ฟังด้วยnc
:
nc -l 99.99.99.1 2048
ในหนึ่งในสามทำการร้องขอ HTTP ด้วยcurl
:
curl http://99.99.99.1:2048/
แม้ว่าใน terminal 2 เราสามารถดูข้อมูลจากการร้องขอการแสดงอะไรขึ้นมาจากcurl
tcpdump
Tun / แตะกวดวิชาชี้แจงสถานการณ์บางอย่างที่เคอร์เนลอาจไม่ได้ส่งแพ็กเก็ตใด ๆ เมื่อมีการดำเนินงานเกี่ยวกับอินเตอร์เฟซท้องถิ่น:
เมื่อดูที่ผลลัพธ์ของ tshark เราจะเห็น ... ไม่มีอะไร ไม่มีทราฟฟิกผ่านอินเตอร์เฟส สิ่งนี้ถูกต้อง: เนื่องจากเรากำลังส่งที่อยู่ IP ของอินเทอร์เฟซระบบปฏิบัติการจึงตัดสินใจได้อย่างถูกต้องว่าไม่จำเป็นต้องส่งแพ็กเก็ต "บนสาย" และเคอร์เนลเองก็ตอบกลับการปิงเหล่านี้ หากคุณคิดเกี่ยวกับสิ่งนี้จะเกิดอะไรขึ้นถ้าคุณส่ง Ping ไปยังที่อยู่ IP ของอินเทอร์เฟซอื่น (เช่น eth0): จะไม่มีการส่งแพ็กเก็ต นี่อาจฟังดูชัดเจน แต่อาจเป็นแหล่งของความสับสนในตอนแรก (สำหรับฉัน)
อย่างไรก็ตามมันยากที่จะดูว่าสิ่งนี้สามารถนำไปใช้กับแพ็คเก็ตข้อมูล TCP
อาจtcpdump
จะต้องผูกกับอินเตอร์เฟซในวิธีที่แตกต่างกันอย่างไร