Как определить начало полезной нагрузки данных в TCP-пакете? - PullRequest
2 голосов
/ 21 октября 2010

Я пишу программу для мониторинга 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 и т. д.)

Спасибо.

1 Ответ

2 голосов
/ 21 октября 2010

Проверьте спецификации заголовка в RFC 793 , RFC 1122 и RFC 3168 .Некоторые из флагов влияют на размер заголовка, наиболее очевидно поля и максимальный размер сегмента .

...