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— то же для Windowsrouting.c— логирование маршрутизируемых пакетов (категорияROUTING, уровеньDEBUG)
Зависимости
platform_compat.h— порядок байт (не используется в текущей реализации, IP-адреса читаются напрямую как LE)- Стандартная библиотека:
<stdio.h>,<string.h>