tcpdump считывает пакеты ipv4 и ipv6 с pcap

Я пытаюсь получить некоторую информацию из полезной нагрузки tcp и udp. Фильтр

(tcp.stream && tcp.flags.push == 1) || udp.stream

в Wireshark дает мне пакеты ipv4 и ipv6.

но я не могу понять, как это сделать через tcpdump. Я старался:

tcpdump -X 'tcp[tcpflags] & tcp-push != 0 or udp' -r some.pcap

но существуют только пакеты ipv4. Что-то вроде

tcpdump -X '((tcp[tcpflags] & tcp-push != 0) or udp) and (ip or ip6)' -r some.pcap

также отображает только пакеты ipv4. Любые примеры будут полезны.

13
задан z0lupka
12.01.2023 9:59 Количество просмотров материала 2788
Распечатать страницу

1 ответ

возможно, это вам поможет:

tcpdump 'ip6[6]==17 or udp or (ip6[6]==6 and ip6[53]&8!=0) or tcp[13]&8!=0' -X -r some.pcap

In tcpdump вы не можете получить пакеты ipv6, как вы пытаетесь, потому что это не поддерживает (по крайней мере до версии 4.9.2) фильтры BPF под ipv6.

и

  • ip6[6]==17 означает udp через ipv6 (6-й байт это поле протокола IPv6-заголовка), ip6[6]==6 означает tcp через ipv6 соответственно;

  • ip6[53]&8!=0 означает tcp - push over ipv6 (40 байт IPv6-заголовка и 13 байт tcp-заголовка, который является tcp-флагами);

  • tcp[13]&8!=0 совпадает с tcp[tcpflags] & tcp-push != 0.

Подробнее: IPv6 и протокол tcpip pocketguide и здесь.

имейте в виду (!):используя ip6[6] определить отказы протокола если любое выдвижение заголовки присутствуют (как указано kasperd). Подробнее о заголовках расширения ipv6 здесь. Отсюда такой способ tcp-пакетов над ipv6 с заголовками расширений не будут захвачены.

кроме того, вы можете написать свой собственный простой фильтр для конкретных (например, чтобы получить последний символ полезных) целей, таких как:

perl -le 'print map { /(?:Flags \[P\.\]|UDP).*(\S)$/s } split /\d{2}:\d{2}:\d{2}\.\d{6}/, `tcpdump -X -r some.pcap 2>/dev/null`'
1
отвечен red0ct 2023-01-13 17:47

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх