Сетевой анализатор трафика на языке программирования 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. Синтаксис командной строки по возможности сохранен.