как рассчитать размер пакета udp libpcap

Из ОС Linux я пытаюсь написать свой собственный монитор использования данных на C или Python. Я искал и исследовал в течение нескольких дней. В настоящее время я пытаюсь адаптировать sniffex.c к своим потребностям. Мне удалось проверить общее количество байтов, отправленных и полученных за несколько сеансов ftp.

В sniffex.c вычисляется размер TCP-пакета. Мой вопрос: как вы рассчитываете размер пакета UDP? Я искал по этой теме, но ничего не нашел. Имеет ли этот вопрос смысл?

Обновление:

Функция, в которой вычисляются размеры пакетов, выглядит так:

got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
...
int size_payload;
...
case IPPROTO_UDP:
    printf("   Protocol: UDP\n");
    size_payload = header->len;
...
}

Мне все еще нужно добавить 4 к size_payload?

Обратный вызов этой функции выглядит так:

/* now we can set our callback function */
pcap_loop(handle, num_packets, got_packet, NULL);

person nomadicME    schedule 22.10.2012    source источник
comment
Кажется, эта строка 'size_payload = header-›len;' это именно то, что вам нужно. У вас есть структура заголовка, поэтому вы можете получить длину пакета непосредственно из этой структуры.   -  person fycth    schedule 22.10.2012


Ответы (1)


Если у вас есть дейтаграмма UDP, вы можете узнать ее размер из ее заголовка.

Например, если у вас есть указатель char *hdr на заголовок дейтаграммы UDP, вы можете получить его длину с помощью такой конструкции

int length = *(int *)(hdr + 4);

Подробнее о UDP http://en.wikipedia.org/wiki/User_Datagram_Protocol

person fycth    schedule 22.10.2012
comment
Спасибо за ответ. Я реализовал это так, как вы показали, но я получаю: предупреждение: присваивание делает целое число из указателя без приведения. Я трачу слишком много времени на python, как лучше всего решить эту проблему? Я уточню в своем первоначальном вопросе. Спасибо. - person nomadicME; 22.10.2012
comment
Я обновил ответ - в строке кода была опечатка, извините - person fycth; 22.10.2012