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

Фильтрация инакпсулированных пакетов GRE с помощью tcpdump

Я могу попросить tcpdump просто показать мне инкапсулированные пакеты GRE с помощью tcpdump -ni any proto gre:

15:02:57.209082 IP 10.14.0.3 > 10.14.0.2: GREv0, key=0x1, length 106: IP 10.10.10.11 > 10.10.10.1: ICMP echo request, id 21073, seq 2784, length 64
15:02:57.209138 IP 10.14.0.2 > 10.14.0.3: GREv0, key=0x1, length 106: IP 10.10.10.1 > 10.10.10.11: ICMP echo reply, id 21073, seq 2784, length 64
15:02:57.345098 IP 10.14.0.2 > 10.14.0.3: GREv0, key=0x1, length 74: IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20

Но можно ли фильтровать, например, только инкапсулированные пакеты icmp или любое другое произвольное выражение?

Поскольку это было полезно для меня, обновил этот ответ.

Если вы хотите посмотреть на прототип внутри другого прототипа, вы не можете просто использовать прото в матче.

протоцепь работает как прото, однако он специально изменяет смещение для следующего совпадения именно для этой цели.

Вместо этого используйте:

protochain GRE && proto ICMP

Источник: pcap-filter (7)

Если ваш tcpdump версия не поддерживает protochain как, например, в Debian 8, вы можете вручную вычислить позицию, где определяется номер протокола пакета ip в туннеле GRE.

ICMP имеет номер протокола 0x01. И хранится в 10-м байте пакета. GREv0 имеет 24 байта, плюс девять (потому что один считается с нуля) равно 33:

tcpdump -i any proto 47 and ip[33]=0x01

tcpdump использует синтаксис фильтра pcap

Фильтр XX в пределах YY;

proto YY && proto XX

ICMP внутри GRE:

proto GRE && proto ICMP