с какого уровня сетевого стека tcpdump получает информацию?

12

Как я пытался напрасно исправить неисправный контроллер локальных сетей здесь , одна вещь , которую я попробовал , был запущен ТСРйитр на машине.

Мне показалось интересным, что 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 () на справочной странице pcap, чтобы получить полный список протоколов уровня 2, которые может анализировать tcpdump (через libpcap).

При чтении на странице человека TCPDUMP даст вам хорошее представление о том , как именно, ТСРйитр и интерфейс Libpcap с интерфейсами ядра и сетей , чтобы иметь возможность читать исходные кадры канального уровня.

Тим Кеннеди
источник
1
Спасибо, Тим. Во-первых, я заглянул на справочную страницу tcpdump и ничего не увидел о ядре / сетевых интерфейсах. Мне интересно узнать больше об этом, если у вас есть какие-либо другие указатели.
Эрик
на странице руководства pcap, на которую я ссылался выше, больше говорится о сетевых интерфейсах. tcpdump только представляет данные. это libpcap, который захватывает данные и взаимодействует с сетевыми устройствами.
Тим Кеннеди