Расчет полезной нагрузки в структуре пакета tcp - PullRequest
0 голосов
/ 16 декабря 2018

Когда я хочу разделить пакет tcp и распечатать каждую часть (eth / ip / tcp / payload) отдельно, как рассчитать конец полезной нагрузки?

PrintData(Buffer, iphdrlen);
PrintData(Buffer + iphdrlen, tcpheader->data_offset*4);
PrintData(Buffer + iphdrlen + tcpheader->data_offset*4, ??? );

Я пытался

PrintData( Buffer + iphdrlen + tcpheader->data_offset*4, ( Size - tcpheader->data_offset*4 - iphdr->ip_header_len*4 ) );

но все пакеты были усечены.Какое значение я должен передать здесь?

Привет

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Формат TCP дает значение каждого поля в заголовке TCP, включая такие сведения, как место начала пакетных данных и длина данных пакета.

Обратите внимание, что элементы в заголовке пакета TCPиспользуйте «сетевой порядок» для каждого из полей

0 голосов
/ 17 декабря 2018

IP-заголовок содержит длину с размером IP-заголовка и полезной нагрузки.Кроме того, заголовок IP содержит поле размера заголовка IP , которое равно числу 32-разрядных слов :

PrintData(Buffer + (iphdrlen * 4) + tcpheader->data_offset * 4, iplen - (iphdrlen * 4 + tcpheader->data_offset * 4));

Как я понимаю, вы забыли умножить iphdrlen на 4в смещении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...