Назад | Перейти на главную страницу

Как захватывать пакеты ack или syn с помощью Tcpdump?

Я хочу использовать правило фильтра для захвата только пакетов подтверждения или синхронизации. Как мне это сделать?

В синтаксис фильтра pcap используемый для tcpdump должен работать точно так же с фильтром захвата wirehark.

С tcpdump я бы использовал такой фильтр.

tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"

Проверьте страница руководства tcpdump, и обратите особое внимание на tcpflags.

Обязательно ознакомьтесь с разделами Wireshark Wiki о фильтрах захвата и отображения. К сожалению, эти два типа фильтров используют совершенно разный синтаксис и разные имена для одного и того же.

Если вам нужен фильтр отображения вместо фильтра захвата, вам, вероятно, потребуется создать выражение, объединяющее tcp.flags.ack и tcp.flags.syn. Я гораздо больше знаком с фильтрами захвата, поэтому вам придется разобраться с этим самостоятельно.

Хотя ответ @Zoredache хорош и полон, обратите внимание, что этот синтаксис приведет к появлению любых пакетов с установленным флагом TCP SYN или TCP ACK, включая пакеты, которые не являются строго простыми пакетами TCP SYN или TCP ACK, потому что они также установить другие флаги. Это может быть, а может и не быть тем, что вы (или будущие читатели) хотели. Например, этот синтаксис также будет захватывать пакеты TCP SYN-ACK, TCP FIN-ACK и т. Д. Если вы хотите только Пакеты TCP SYN или TCP ACK (т. Е. ТОЛЬКО один из этих флагов установлен), правильный синтаксис фильтра захвата:

'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'

Эквивалентно:

'tcp[13] == 2 or tcp[13] == 16'

Ура!

tcpdump 'tcp[13] = 3'

http://danielmiessler.com/study/tcpdump/

Продвинутый

Вы также можете фильтровать на основе определенных частей пакета, а также объединять несколько условий в группы. Первый полезен при поиске только SYNs или RSTs, например, и последний для еще более продвинутой изоляции трафика.

UAP RSF

[Подсказка: анаграмма для флагов TCP: неквалифицированные злоумышленники пристают к настоящим специалистам по безопасности]

ваша записка: ...

Покажи мне все СРОЧНО (URG) пакеты ...

tcpdump 'tcp[13] & 32 != 0'

Покажи мне все ПОДТВЕРЖДЕНИЕ (ACK) пакеты ...

tcpdump 'tcp[13] & 16 != 0'

Покажи мне все PUSH (PSH) пакеты ...

tcpdump 'tcp[13] & 8 != 0'

Показать все СБРОС (RST) пакеты ...

tcpdump 'tcp[13] & 4 != 0'

Покажи мне все СИНХРОНИЗИРОВАТЬ (SYN) пакеты ...

tcpdump 'tcp[13] & 2 != 0'

Покажи мне все ФИНИШ (FIN) пакеты ...

tcpdump 'tcp[13] & 1 != 0'

Покажи мне все СИНХРОНИЗАЦИЯ / ПОДТВЕРЖДЕНИЕ (SYNACK) пакеты ...

tcpdump 'tcp[13] = 18'

[Примечание: Только PSH, RST, SYN, и FIN флаги отображаются в выводе поля флага tcpdump. URGs и ACKs отображаются, но они отображаются в другом месте вывода, а не в поле флагов]

Я сделал сценарий, чтобы увидеть топ «синнеров». Для этого я рассматриваю только начальный пакет syn (первый пакет из трех пакетов подтверждения). То есть syn = 1, ack = 0

while :; do
  date; 
  tcpdump -i eth1 -n -c 100 \
  'tcp[tcpflags] & (tcp-syn) != 0' and 
  'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
  | awk '{ print $3}' \
  | sort | uniq -c | sort | tail -5;
  echo;
  sleep 1
done

Я сам хотел получать только SYN-пакеты, использовал следующую команду:

tcpdump -i eth7 'tcp[13] & 2 != 0'

Это должно сработать для вас сразу.

он должен показывать их без каких-либо фильтров и аргументов.