Я пишу программу для мониторинга FTP-трафика с использованием сырых сокетов. Теперь я могу определить начало данных в TCP-пакете, используя этот код:
// char * packet;
// struct * iphdr;
// struct * tcphdr;
// ...
// check, whether sniffed ethernet frame contains IP and TCP
char * data;
data = (packet + sizeof (struct ethhdr) + sizeof (struct tcphdr) + (header_ip->ihl * 4) + header_tcp->doff) + 4;
Это прекрасно работает, но я должен добавить «магическое» число 4 к указателю данных. Без добавления, последняя строка начинается с нескольких бессмысленных символов.
Есть ли чистое решение, как определить начало передаваемых данных? (без использования каких-либо специализированных библиотек, таких как libcap и т. д.)
Спасибо.