Реализация сниффера протокола TCP/IP на языке

advertisement
Сетевой анализатор трафика
на языке программирования
Perl в ОС Windows
Курсовая работа студентки 345 группы
Филипповой Анастасии Валерьевны
Научный руководитель
Баклановский Максим Викторович
Задача
Реализация классической команднострочной утилиты tcpdump на языке perl в
среде ОС Windows без использования
специализированного ПО для
низкоуровневого доступа к сетевым
адаптерам (libpcap, NDIS драйвера...).
Введение
Режимы работы сетевого интерфейса


Обычный режим.
Promiscuous режим.
Включается так:
ioctl(Socket,SIO_RCVALL,pack("l",1))
Специфика Windows:
Ioctl будет успешным, если Socket
привязан(bind) к конкретному
интерфейсному адресу =>
Для анализа трафика нескольких
интерфейсов используем несколько
процессов и несколько Socket-ов.
Использование нескольких процессов =>
проблемы:
•
•
•
передача параметров при старте
процесса(передача адреса интерфейса)
синхронизация вывода от нескольких
процессов
подсчет общего количества пакетов
Первая версия
Механизм распараллеливания – fork



Передача параметров – ясно
Синхронизация вывода – локировки с
помощью файла
Подсчет пакетов – необходимо
организовывать обмен данными между
процессами
Вторая версия
Механизм распараллеливания – perl ithreads



Передача параметров – тривиально(в
конструкторе thread)
Синхронизация вывода –
тривиально(отдельный thread для вывода,
читающий общую очередь сообщений)
Подсчет пакетов – тривиально(в thread
вывода)
tcpdump.pl -i 193.124.81.4 -n -v
perl compiled for Windows
Architecture: x86
OS Name: WinXP/.Net Service Pack 3 major 5 minor 1 build 2600 id 2
193.124.81.4
01:00:18.93750 IP (tos 0x0, ttl 255, id 699, offset 0, flags [none], proto UDP (17), length 147)
193.124.81.5.6771 > 239.192.152.143.6771 : UDP
01:00:18.97350 IP (tos 0x0, ttl 255, id 700, offset 0, flags [none], proto UDP (17), length 147)
193.124.81.5.6771 > 239.192.152.143.6771 : UDP
01:00:19.87413 IP (tos 0x0, ttl 64, id 33339, offset 0, flags [none], proto UDP(17), length 59)
193.124.81.4.58906 > 193.124.83.73.53 : UDP
01:00:19.94365 IP (tos 0x40, ttl 62, id 46843, offset 0, flags [none], proto UDP (17), length 336)
193.124.83.73.53 > 193.124.81.4.58906 : UDP
01:00:19.95186 IP (tos 0x0, ttl 64, id 33356, offset 16384, flags [D], proto TCP (6), length 52)
193.124.81.4.3457 > 74.125.232.16.80 : Flags: [S] seq: 416347125 ack: 0 win: 65535
01:00:19.97047 IP (tos 0x0, ttl 64, id 33357, offset 16384, flags [D], proto TCP (6), length 40)
193.124.81.4.3457 > 74.125.232.16.80 : Flags: [A] seq: 416347126 ack: 4222065250 win: 64240
01:00:19.97447 IP (tos 0x20, ttl 59, id 0, offset 16384, flags [D], proto TCP (6), length 52)
74.125.232.16.80 > 193.124.81.4.3457 : Flags: [SA] seq: 4222065249 ack: 416347126 win: 5840
01:00:19.97904 IP (tos 0x0, ttl 64, id 33358, offset 16384, flags [D], proto TCP (6), length 736)
193.124.81.4.3457 > 74.125.232.16.80 : Flags: [PA] seq: 416347126 ack: 4222065250 win: 64240
Заключение.
Реализован аналог утилиты tcpdump на
языке perl в OC Windows. Синтаксис
командной строки по возможности
сохранен.
Download