размер ICMP Тип 11 нагрузка пакета
каков размер полезной нагрузки пакета ICMP, когда Тип 11, т. е. превышено время? Поскольку он содержит IP-заголовок и первые 8 байтов полезной нагрузки IP-пакета, генерирующего сообщение ICMP, я думал, что его размер составляет 20 + 8 = 28.
Я проигрываю некоторый общий пользовательский трафик с TTL=1. В сообщениях ICMP, которые я сбросил, я заметил, что:
- все пакеты ICMP, генерируемые пакетами UDP, имеют полезную нагрузку размером 28 байт
- все те, которые порождаются Пакеты TCP имеют полезную нагрузку размером 40 байт
поскольку мне нужно сопоставить сообщения с превышением времени ICMP с пакетами, которые вызвали их, сравнивая эти байты, эта часть информации важна, но я не могу понять, почему это происходит.
3 ответов
проблема в том, что вы цитируете 8-байтовую полезную нагрузку заголовка из RFC 792, Страница 4, но требования были изменены RFC 1812...
Time Exceeded Message (in RFC 792)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RFC 1812, раздел 4.3.2.3 резко увеличивает допустимую полезную нагрузку в сообщении об ошибке ICMP (акцент мой):
4.3.2.3 Заголовок Исходного Сообщения
исторически каждое сообщение об ошибке ICMP включало интернет верхнего и по минимум первые 8 байтов данных дейтаграммы, которые сработала ошибка. Это больше не адекватно, должный к пользе IP-in-IP туннелирование и другие технологии. таким образом, ICMP дейтаграмма должна содержать как можно больше исходной дейтаграммы без длины дейтаграммы ICMP, превышающей 576 байт. Этот возвращенный IP-заголовок (и пользовательские данные) должен быть идентичен тому, который был получен, за исключением того, что маршрутизатор не требуется отменять изменения заголовка IP, которые обычно выполняются в пересылка, выполненная до обнаружения ошибки (например, уменьшение TTL или обновление параметров).
ошибки ICMP, которые вы генерируете из пакетов Scapy, должны содержать всю информацию из слоев IP и TCP исходного пакета.
Как вы отметили, полезная нагрузка ICMP-это IP-заголовок плюс 8 октетов полезной нагрузки исходного пакета. Однако IP-заголовки не всегда имеют длину 20 октетов; 20 - это только минимум. Сам IP-заголовок может содержать параметры,а длина заголовка указывается значением в поле IHL заголовка. П. 3.1 в RFC 791. Таким образом, похоже, что пакеты TCP имеют 12 дополнительных октетов опций в своих IP-заголовках. RFC 791 определяет некоторые стандартные параметры, такие как маршрутизация источника и timestamping. Вам нужно будет декодировать заголовок, чтобы определить, какие параметры используются.
Я хотел бы добавить для дальнейшего использования, что не только ICMP полезные нагрузки различаются по размеру, как сказал Майк, они также могут быть длиннее, чем 128 байт в случае расширения ICMP для MPLS. См.этот проект для получения дополнительной информации