ฉันต้องการจับภาพทราฟฟิกบนอินเตอร์เฟสเสมือนของ 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 เราสามารถดูข้อมูลจากการร้องขอการแสดงอะไรขึ้นมาจากcurltcpdump
Tun / แตะกวดวิชาชี้แจงสถานการณ์บางอย่างที่เคอร์เนลอาจไม่ได้ส่งแพ็กเก็ตใด ๆ เมื่อมีการดำเนินงานเกี่ยวกับอินเตอร์เฟซท้องถิ่น:
เมื่อดูที่ผลลัพธ์ของ tshark เราจะเห็น ... ไม่มีอะไร ไม่มีทราฟฟิกผ่านอินเตอร์เฟส สิ่งนี้ถูกต้อง: เนื่องจากเรากำลังส่งที่อยู่ IP ของอินเทอร์เฟซระบบปฏิบัติการจึงตัดสินใจได้อย่างถูกต้องว่าไม่จำเป็นต้องส่งแพ็กเก็ต "บนสาย" และเคอร์เนลเองก็ตอบกลับการปิงเหล่านี้ หากคุณคิดเกี่ยวกับสิ่งนี้จะเกิดอะไรขึ้นถ้าคุณส่ง Ping ไปยังที่อยู่ IP ของอินเทอร์เฟซอื่น (เช่น eth0): จะไม่มีการส่งแพ็กเก็ต นี่อาจฟังดูชัดเจน แต่อาจเป็นแหล่งของความสับสนในตอนแรก (สำหรับฉัน)
อย่างไรก็ตามมันยากที่จะดูว่าสิ่งนี้สามารถนำไปใช้กับแพ็คเก็ตข้อมูล TCP
อาจtcpdumpจะต้องผูกกับอินเตอร์เฟซในวิธีที่แตกต่างกันอย่างไร