You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

3.4 KiB

Packet Dump (декодирование IP-пакетов)

1. Назначение

Вспомогательный модуль для диагностики: парсит сырой IPv4-пакет и формирует человекочитаемую строку с IP-адресами, протоколом, портами, флагами и hex-дампом первых 32 байт payload. Используется только в отладочных логах (категории TUN, ROUTING) для трассировки проходящих через TUN пакетов.

2. Как пользоваться

#include "packet_dump.h"

// packet_data указывает на начало IPv4-заголовка
const uint8_t* packet_data = ...;
size_t len = ...;

char* str = dump_ip_packet_to_buffer(packet_data, len);
DEBUG_DEBUG(DEBUG_CATEGORY_TUN, "[TUN->] %s", str);

Важно: функция возвращает указатель на статический буфер (1024 байта). Не thread-safe. Каждый вызов перезаписывает предыдущий результат.

Примеры вывода

IPv4 TCP 192.168.1.5:443 -> 10.0.0.2:54321 (1420 bytes) [ACK,PSH] seq=123456 ack=789012 win=64240 data: 1703012345...
IPv4 UDP 10.0.0.1:53 -> 192.168.1.3:45678 (76 bytes) len=56 data: 4500003c...
IPv4 ICMP 10.0.0.1 -> 8.8.8.8 (84 bytes) echo_request seq=1 id=1234 data: 08004d2c...
IPv4 ICMP 8.8.8.8 -> 10.0.0.1 (84 bytes) echo_reply seq=1 id=1234 data: 0000552c...

3. API

Функции

dump_ip_packet_to_buffer(data, len) — парсит IPv4-заголовок и заголовок транспортного уровня, возвращает строку вида IPv4 PROTO SRC:PORT -> DST:PORT (SIZE bytes) DETAILS data: HEX....

Параметры:

  • data — указатель на начало IPv4-пакета
  • len — полная длина данных
  • Возвращает static char[1024]

Обрабатываемые протоколы:

  • TCP (6): порты, seq/ack, флаги (FIN, SYN, RST, PSH, ACK, URG, ECE, CWR), window
  • UDP (17): порты, длина
  • ICMP (1): тип/code, echo_request/echo_reply с seq и id

Для нераспознанных протоколов выводит src_ip:0 -> dst_ip:0 и 32 байта payload (может выйти за границы пакета — диагностический код, безопасностью жертвует в пользу информативности).

Hex-дамп: 32 байта транспортного payload (начиная с data[ihl]), 4 группы по 8 байт.

tcp_flags_to_str(flags) (static) — преобразует байт TCP-флагов в строку вида SYN,ACK или none.

Где используется

  • tun_if.c — логирование пакетов из/в TUN-интерфейс (категория TUN, уровень DEBUG)
  • tun_windows.c — то же для Windows
  • routing.c — логирование маршрутизируемых пакетов (категория ROUTING, уровень DEBUG)

Зависимости

  • platform_compat.h — порядок байт (не используется в текущей реализации, IP-адреса читаются напрямую как LE)
  • Стандартная библиотека: <stdio.h>, <string.h>