bitlvl
RU

Декодер пакетов

Вставьте hex одного пакета (tcpdump -xx, hex-дамп Wireshark, строку \x45\x00) или перетащите файл захвата. Каждый заголовок разбирается бит за битом, контрольные суммы пересчитываются, а каждое поле подсвечивает свои байты в дампе.

Результаты и сообщения этого инструмента выводятся на английском языке.

Как читать пакет

Пакет в сети — это стопка заголовков, каждый из которых говорит, что идёт дальше: поле type в Ethernet указывает на IPv4, поле protocol в IP — на TCP, порт TCP подсказывает DNS или HTTP. Декодер проходит по этой цепочке. Каждый заголовок показан с его полями, их байтовыми смещениями и, для упакованных полей вроде флагов IP или data offset в TCP, точными битами. Наведите курсор на поле, чтобы увидеть, где оно находится в hex-дампе внизу.

Как получить байты

ИсточникКоманда / действиеКанальный уровень
tcpdump, один пакет с заголовком Ethernettcpdump -c1 -xx -ni eth0 port 53Ethernet
tcpdump без канального уровняtcpdump -c1 -x -ni eth0 …Raw IPv4/IPv6 (определяется)
tcpdump на «any»tcpdump -c1 -xx -ni any …Linux cooked (SLL)
WiresharkПравый клик по пакету → Copy → …as a Hex Dump или File → Export Packet DissectionsEthernet
Весь захватtcpdump -c100 -w out.pcap port 53Читается из файла
Scapy / Pythonbytes(pkt).hex()Зависит от первого уровня

Контрольные суммы

IPv4 покрывает только свой заголовок; TCP, UDP и ICMPv6 покрывают свой заголовок, свои данные и псевдозаголовок с IP-адресами, протоколом и длиной — поэтому NAT, переписывающий адреса, должен переписывать и транспортные контрольные суммы. Неверная контрольная сумма в захвате, сделанном на отправляющей машине, почти всегда означает checksum offloading: ядро оставляет поле сетевой карте, которая заполняет его уже после точки захвата. В захвате с другой машины или с зеркального порта неверная контрольная сумма означает реальное повреждение. UDP поверх IPv4 может законно содержать 0 в значении «не вычислена».

На что указывает декодер

  • Значения TTL, выдающие ОС отправителя (64 — Linux/macOS, 128 — Windows, 255 — сетевое оборудование) и число переходов до него.
  • Частные, link-local, multicast и документационные адреса; локально администрируемые MAC (виртуальные машины, случайные Wi-Fi-адреса).
  • Состояние TCP-рукопожатия по флагам, масштабирование окна и MSS из опций, блоки SACK, метки времени.
  • Фрагментированные IP-пакеты, на которых декодер останавливается (транспортный заголовок есть только в первом фрагменте).
  • В ошибках ICMP декодируется и процитированная исходная датаграмма, так что видно, к какому соединению относится «port unreachable» или «TTL exceeded».
  • В TLS ClientHello — имя хоста SNI, предлагаемые версии, группы и протоколы ALPN: всё, что ещё видно открытым текстом.

Вопросы

Почему декодер говорит, что моя контрольная сумма TCP неверна?

Если захват сделан на машине, отправившей пакет, контрольную сумму должна была заполнить сетевая карта уже после захвата (checksum offloading); Wireshark показывает то же самое. Отключите его командой ethtool -K eth0 tx off, когда в захватах нужны реальные значения, или захватывайте на принимающей стороне.

Может ли он прочитать целый файл pcap?

Да, перетащите .pcap или .pcapng (до 8 МБ, в списке до 5000 пакетов). Нажмите на пакет в списке, чтобы декодировать его. Файл никогда не покидает ваш браузер.

А кадры Wi-Fi 802.11 или radiotap?

Пока не декодируются; захваты с такими типами канального уровня выводят список пакетов, но показывают байты как полезную нагрузку. Поддерживаются Ethernet, Linux cooked, raw IP и BSD loopback.

Собирает ли он TCP-потоки или отслеживает соединения?

Нет. Он декодирует по одному пакету за раз. Для анализа потоков используйте Wireshark; чтобы понять, что именно говорит один заголовок, этот инструмент быстрее.

Моя полезная нагрузка показана как «TCP payload», хотя это HTTP.

HTTP распознаётся по первым байтам (метод или HTTP/1.x) независимо от порта. Зашифрованный трафик на 443 показывается как записи TLS, а всё остальное — как сырые байты с колонкой ASCII.