Китаев А.Е. (Kitaev_A_E сбчк mail.ru)

Наверх

След.  

Описание семейства программ sniffxx для перехвата

заголовков IP пакетов с целью их дальнейшей

статистической обработки.

 

 

Программы используют библиотеку pcap и созданную мной библиотеку libKA (там размещены оригинальные функции для обработки строк, списков и др.).

Компилировались и запускались под управлением операционной системы Linux ( Red Hat 7.3 ).

 

Первое приложение - sniff91

 

Компиляция происходит так (приведу командную строку):

 

gcc o sniff91 sniff91.c lpcap L. libKA

 

Запуск на выполнение такой:

 

./sniff91 eth0 ./RES_0101

 

Здесь «eth0» - это прослушиваемый интерфейс. Если мы хотим контролировать, кто сколько скачивает байт из интернета, то программу имеет смысл запускать на Linux-маршрутизаторе, через который происходит выход в Интернет. Программы испытывалась на компьютере с ОС Linux (Red Hat 7.3 ), был настроен маскарад через iptables (или SNAT). «eth0» - это интерфейс, который был подсоединен к свичу, к этому же свичу подходили кабели и от других компьютеров локальной сети. То-есть, прослушивался тот интерфейс, который подсоединен к локальной сети.

«RES_0101» - это имя файла, в который будут записываться заголовки пакетов. Это текстовый файл (в формате UNIX, т.е. каждая строка заканчивается байтом 10). Каждая строка состоит из ряда полей (т.е. слов фактически), разделенных пробелами.

1-е поле:   дата пакета (напр. 29.01.2007)

2-е поле:   время пакета (например 21:31:54)

3-е поле:   длина пакета (количество байт)

4-е поле:   IP-адрес источника (напр. 192.168.0.70 ).

5-е поле    IP-адрес получателя

6-е поле    номер (код) протокола  (6 это TCP, 17 это UDP и т.д.)

7-е поле    текстовая расшифровка протокола (или TCP, или UDP, или OTHER если другой протокол).

Если протокол TCP, то есть еще 2 поля:

8-е поле:   порт источника

9-е поле    порт получателя.

Кроме всего этого была замечена одна тонкость. Некоторые перехватываемые пакеты имели явно неправильный вид. В них присутствовало что-то похожее на IP-адреса, но они были сдвинуты в другие поля. По признаку равенства поля версии четырем (смотрите литературу о полях заголовков IP-пакетов) производилась фильтрация, и в случае, если поле версии не равнялось 4, в строку записывались дата и время, как и для обычных пакетов, а дальше шло (после пробела) «strange wrong IP4 packet STRANGE».

Вот кусок этого файла с результатами перехвата:

 

29.01.2007  21:31:54  strange  wrong  IP4  packet  STRANGE

29.01.2007  21:31:54  strange  wrong  IP4  packet  STRANGE

29.01.2007  21:31:54  57  192.168.1.10  195.122.226.1  17  UDP 

29.01.2007  21:31:54  276  195.122.226.1  192.168.1.10  17  UDP 

29.01.2007  21:31:54  48  192.168.1.10  194.67.57.26  6  TCP  1034  80 

29.01.2007  21:31:54  44  194.67.57.26  192.168.1.10  6  TCP  80  1034 

29.01.2007  21:31:54  40  192.168.1.10  194.67.57.26  6  TCP  1034  80 

29.01.2007  21:31:54  716  192.168.1.10  194.67.57.26  6  TCP  1034  80 

29.01.2007  21:31:54  40  194.67.57.26  192.168.1.10  6  TCP  80  1034 

29.01.2007  21:31:54  1500  194.67.57.26  192.168.1.10  6  TCP  80  1034 

29.01.2007  21:31:55  40  192.168.1.10  194.67.57.26  6  TCP  1034  80 

 

При работе программы на экран выводится номер пакета (эти номера, естественно, мелькают очень быстро). Прерывается работа программы нажатием Ctrl-C.

 

 

Второе приложение - sniff92

 

Компиляция и запуск на выполнение происходят также. Но при выводе в файл происходит определенная фильтрация. Во-первых отбрасываются «неправильные» пакеты (которые раньше помечались как strange в 3-м поле см.выше). Во-вторых контролируется адрес получателя, и в файл пишутся лишь пакеты, где у получателя первое число адреса есть 192, а второе 168. Также откидывается время пакета (таким образом 2-е поле в каждой строке это уже длина пакета).

Вот кусок выходного файла:

 

16.03.2007  68  192.168.0.1  192.168.0.70  6  TCP  22  1184 

16.03.2007  40  192.168.0.70  192.168.0.1  6  TCP  1184  22 

16.03.2007  68  192.168.0.1  192.168.0.70  6  TCP  22  1184 

16.03.2007  68  192.168.0.1  192.168.0.70  6  TCP  22  1184 

16.03.2007  40  192.168.0.70  192.168.0.1  6  TCP  1184  22 

16.03.2007  68  192.168.0.1  192.168.0.70  6  TCP  22  1184 

 

Третье приложение - sniff93

 

Компиляция и запуск на выполнение происходят также. Но здесь все таки пишется время пакета (решено не экономить 1/6 часть файла или даже менее). Кроме того выходной файл есть текстовый файл в формате DOS (каждая строка заканчивается на байты 13,10).

 

Четвертое приложение - sniff94

 

То же, что и sniff93, но исключен вывод времени.

 

/////////////////////////////////////////////////

В качестве «промышленного» варианта (на работе) запускался sniff94:

 

./sniff94 eth1 ./RES_0101

 

(это на работе). При большой нагрузке (в сети около 100 компьютеров, имеющих доступ к Интернет, ежедневно скачивается с Интернета более 1Г ) файл растет примерно на 1Мб в минуту. Торможения доступа к Интернету практически не заметно.

Хостинг от uCoz