tcpdump สแต็กเครือข่ายระดับใดที่ได้รับข้อมูลมา


12

ขณะที่ผมกำลังพยายามที่ไร้ผลที่จะแก้ไขข้อผิดพลาดของตัวควบคุมอีเธอร์เน็ตที่นี่สิ่งหนึ่งที่ผมพยายามวิ่ง tcpdump บนเครื่อง

ฉันพบว่าน่าสนใจที่ tcpdump สามารถตรวจจับได้ว่าแพ็คเก็ต ICMP บางอันที่แอปพลิเคชัน ping คิดว่าการส่งไม่ได้ออกนอกสายจริงแม้ว่ามันจะทำงานบนเครื่องเดียวกันก็ตาม ฉันทำซ้ำผลลัพธ์ tcpdump เหล่านี้ที่นี่:

14:25:01.162331 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 1, length 64
14:25:02.168630 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 2, length 64
14:25:02.228192 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 2, length 64
14:25:07.236359 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 3, length 64
14:25:07.259431 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 3, length 64
14:25:31.307707 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 9, length 64
14:25:32.316628 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 10, length 64
14:25:33.324623 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 11, length 64
14:25:33.349896 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 11, length 64
14:25:43.368625 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 17, length 64
14:25:43.394590 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 17, length 64
14:26:18.518391 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 30, length 64
14:26:18.537866 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 30, length 64
14:26:19.519554 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 31, length 64
14:26:20.518588 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 32, length 64
14:26:21.518559 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 33, length 64
14:26:21.538623 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 33, length 64
14:26:37.573641 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 35, length 64
14:26:38.580648 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 36, length 64
14:26:38.602195 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 36, length 64

โปรดสังเกตว่าหมายเลข seq กระโดดหลายครั้ง ... ที่ระบุแพ็คเก็ตที่แอปพลิเคชัน ping สร้างขึ้นซึ่งไม่ได้ออกจากกล่องจริง

สิ่งใดนำมาสู่คำถามของฉัน: tcpdump สามารถตรวจจับได้อย่างไรว่าแพ็คเก็ต ICMP นั้นไม่ได้ออกไปข้างนอกจริง ๆ มันสามารถที่จะตรวจสอบสิ่งที่อยู่ในสายโดยตรงหรือไม่?

หากทำสิ่งนี้สำเร็จฉันคิดว่ามันคือการเชื่อมต่อกับบางส่วนของเคอร์เนลซึ่งจะเชื่อมต่อกับฮาร์ดแวร์บางตัวที่เป็นส่วนมาตรฐานของคอนโทรลเลอร์เครือข่าย

ถึงอย่างนั้นมันก็ค่อนข้างเจ๋ง! หากนั่นไม่ใช่วิธีการทำงานของ tcpdump ใครบางคนสามารถอธิบายให้ฉันฟังได้ว่ามันตรวจพบแพ็กเก็ตที่หายไปในซอฟต์แวร์ได้อย่างไร

คำตอบ:


13

ใช่. โดยการทำให้เน็ตเวิร์กอินเตอร์เฟสเข้าสู่โหมดที่หลากหลาย, tcpdump สามารถเห็นสิ่งที่เกิดขึ้น (และใน) อินเตอร์เฟสเครือข่าย

tcpdump ทำงานที่ layer2 + มันสามารถใช้เพื่อดู Ethernet, FDDI, PPP & SLIP, Token Ring และโปรโตคอลอื่น ๆ ที่สนับสนุนโดย libpcap ซึ่งทำหน้าที่ยกของหนัก tcpdump ทั้งหมด

ดูที่ส่วน pcap_datalink () ของหน้า man pcapเพื่อดูรายการทั้งหมดของโปรโตคอลเลเยอร์ 2 ที่ tcpdump (ผ่าน libpcap) สามารถวิเคราะห์ได้

การอ่านหน้า man tcpdumpจะทำให้คุณเข้าใจได้ดีว่าอินเตอร์เฟส tcpdump และ libpcap กับเคอร์เนลและเน็ตเวิร์กอินเตอร์เฟสสามารถอ่านเฟรมเลเยอร์ข้อมูลดิบลิงก์ได้อย่างไร


1
ขอบคุณทิม สิ่งหนึ่งที่ฉันดูที่หน้า man tcpdump และไม่เห็นอะไรเกี่ยวกับ kernel / network interface ฉันอยากรู้อยากเห็นเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ถ้าคุณมีตัวชี้อื่น ๆ
เอริค

หน้า man pcap ที่ฉันลิงค์ด้านบนพูดถึงเครือข่ายอินเทอร์เฟซมากขึ้น tcpdump นำเสนอข้อมูลเท่านั้น มันเป็น libpcap ที่รวบรวมข้อมูลและเชื่อมต่อกับอุปกรณ์เครือข่าย
ทิมเคนเนดี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.