LINUX.ORG.RU

Непонятки с libnet


0

0

В продолжение темы http://www.linux.org.ru/jump-message.jsp?msgid=1630134

Я написал следующий код:
/* Создаем ethernet кадр */
libnet_build_ethernet("\x00\x17\x31\x97\x0D\xC5", "\x00\x17\x31\x97\x0D\xC3", ETHERTYPE_IP, NULL, 0, buf);

/* Создаем ip пакет */
libnet_build_ip(TCP_H + 8, 0, libnet_get_prand(PRu16), 0, 64, IPPROTO_TCP, 3232269768, 3232269767, NULL, 0, buf + ETH_H);

/* Создаем tcp пакет без payload, но с зарезервированными для него 8 байтами */
libnet_build_tcp(1010, 8080, 100, 300, TH_SYN, 6553, 0, NULL, 8, buf + ETH_H + IP_H);

/* Считаем чексумму для IP */
libnet_do_checksum(buf + ETH_H, IPPROTO_TCP, TCP_H + 1);


После этого дампим это в pcap-файл
Все бы ничего, но есть пара проблем:
1. Контрольная сумма IP пакета == 0 (хотя функция исполняется успешно)
2. bogus TCP header length (0, must be at least 20)

Кто-нить сталкивался с таким?
$ strings /usr/lib/libnet.a | grep version
libnet version 1.0.2a (c) 1998, 1999 Mike D. Schiffman <mike@infonexus.com>

C чексуммой разобрался: я ее просто не создавал :)) Надо добавить
libnet_do_checksum(buf + ETH_H, IPPROTO_IP, LIBNET_IP_H);

С заголовком TCP какая-то бага в libnet походу. Если формировать руками структуру tcphdr из netinet/tcp.h, то все ок

BreadFan ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.