Я хочу використовувати правило фільтра для захоплення лише пакетів ack або syn. Як це зробити?
Я хочу використовувати правило фільтра для захоплення лише пакетів ack або syn. Як це зробити?
Відповіді:
Синтаксис PCAP фільтра використовується для ТСРйітр повинен працювати точно так само , як на захоплення Wireshark фільтра.
З tcpdump я би використовував такий фільтр.
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
Перегляньте сторінку man tcpdump і зверніть пильну увагу на tcpflags.
Не забудьте також ознайомитись з розділами у Wireshark Wiki про фільтри захоплення та відображення. На жаль, два типи фільтрів використовують абсолютно різні синтаксиси та різні назви для однієї і тієї ж речі.
Якщо ви хочете відобразити фільтр замість фільтра захоплення, вам, ймовірно, потрібно буде створити вираз, що поєднує tcp.flags.ack і tcp.flags.syn. Я набагато більше знайомий з фільтрами захоплення, тому вам доведеться працювати над собою.
Хоча відповідь @ Zoredache є приємною і повною, зауважте, що цей синтаксис видасть усі пакети, у яких встановлений прапор TCP або прапор 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'
Ура!
Я створив сценарій, щоб побачити топ "синхроністів". Для цього я вважаю лише початковий пакет синхронізації (перший пакет рукостискання з трьох пакетів). Тобто, 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
tcpdump 'tcp[13] = 3'
http://danielmiessler.com/study/tcpdump/
Розширений
Ви також можете фільтрувати на основі певних частин пакету, а також комбінувати декілька умов у групи. Перший корисний , наприклад, для пошуку лише SYN
s або RST
s, а другий для ще більш розвиненої ізоляції трафіку.
UAP RSF
[Підказка: Анаграма для прапорів TCP: Некваліфіковані нападники Pester Real Security Folk]
ваше нагадування: ...
Показати мені всі НЕПІШНІ ( URG
) пакети ...
tcpdump 'tcp[13] & 32 != 0'
Показати мені всі ACK
пакети ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] & 16 != 0'
Показати мені всі PSH
пакети PUSH ( )
tcpdump 'tcp[13] & 8 != 0'
Показати всі RST
пакети RESET ( )
tcpdump 'tcp[13] & 4 != 0'
Показати мені всі SYN
пакети SYNCHRONIZE ( )
tcpdump 'tcp[13] & 2 != 0'
Показати всі FIN
пакети FINISH ( )
tcpdump 'tcp[13] & 1 != 0'
Показати мені всі SYNACK
пакети SYNCHRONIZE / ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] = 18'
[ Примітка: Тільки PSH
, RST
, SYN
, і FIN
прапори відображаються в поле виведення прапора TCPDUMP в. URG
s і ACK
s відображаються, але вони відображаються в іншому місці виводу, а не в полі прапорів]
Я хотів отримати лише SYN-пакети, я використав таку команду:
tcpdump -i eth7 'tcp[13] & 2 != 0'
Це повинно працювати для вас відразу.
tcpdump -s SIZE
. Заголовок TCP може бути різної довжини, тому захоплення-s 128
, ймовірно, отримає всі можливі заголовки та, можливо, трохи даних.