Хранение списка IP-адресов в моей сети с ее переходами состояния TCP - PullRequest
0 голосов
/ 13 марта 2012

После перехвата пакетов с помощью libpcap я хочу сохранить список IP-адресов (соединений) в моей сети, и для каждого соединения я хочу сохранить его переходы состояний TCP.

Возможно ли использование связанного списка?Если да, то как?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

snifex.c - хорошее начало (http://www.tcpdump.org/pcap.html)

В функции обратного вызова:

got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);

указатель * ip указывает на начало заголовка ip.

ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);

Там вы можете найти информацию об IP-адресе. Обратите внимание, что вы должны разделить вызовы inet_ntoa, так как кажется, что они используют статический буфер. Поэтому вы должны использовать два вызова printf, если вы планируете показывать вывод в cmdили файл. Вот почему они находятся в отдельных строках в snifex.c:

printf("       From: %s\n", inet_ntoa(ip->ip_src));
printf("         To: %s\n", inet_ntoa(ip->ip_dst));

Для получения информации о TCP вы можете использовать указатель tcp

tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip);

Использовать флаги TCP tcp-> th_flags для определения состояния соединения, например, tcp->th_flags==TH_SYN

После того, как вы знаете флаги, вы должны проверить диаграмму состояний RFC793 TCP / IP, чтобы определить состояние протокола TCP.

С точки зрения реализаций, вы могли бы использовать хеш-массив для каждого 4-го кортежа (srcIP, dstIP, srcPort, dstPort), чтобы иметь O (1) (лучший случай). Обратите внимание, что может бытьслучаи, когда вы видите средний поток или полуоткрытый TCP cсоединения и т. д. RFC подробно описывает, как с ними обращаться.

Наконец, если вы не хотите реализовывать протокол TCP, вы можете использовать библиотеку Libnids , которая эмулирует стек IP Linux2.0.x, предлагает дефрагментацию IP и сборку потока TCP.

0 голосов
/ 13 марта 2012

да, это возможно

libpcap - это библиотека C с открытым исходным кодом, которая предоставляет доступ к вашей сетевой карте в случайном режиме для захвата пакетов

знать? ну, я просто помню это:

 - you can developed
 - use tcpdump and write a condition to capture and export to a file
 - use wireshark and write a condition to capture and export to a file
...