Сетевой анализатор трафика на языке программирования 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 n -v perl compiled for Windows Architecture: x86 OS Name: WinXP/.Net Service Pack 3 major 5 minor 1 build 2600 id :00: IP (tos 0x0, ttl 255, id 699, offset 0, flags [none], proto UDP (17), length 147) > : UDP 01:00: IP (tos 0x0, ttl 255, id 700, offset 0, flags [none], proto UDP (17), length 147) > : UDP 01:00: IP (tos 0x0, ttl 64, id 33339, offset 0, flags [none], proto UDP(17), length 59) > : UDP 01:00: IP (tos 0x40, ttl 62, id 46843, offset 0, flags [none], proto UDP (17), length 336) > : UDP 01:00: IP (tos 0x0, ttl 64, id 33356, offset 16384, flags [D], proto TCP (6), length 52) > : Flags: [S] seq: ack: 0 win: :00: IP (tos 0x0, ttl 64, id 33357, offset 16384, flags [D], proto TCP (6), length 40) > : Flags: [A] seq: ack: win: :00: IP (tos 0x20, ttl 59, id 0, offset 16384, flags [D], proto TCP (6), length 52) > : Flags: [SA] seq: ack: win: :00: IP (tos 0x0, ttl 64, id 33358, offset 16384, flags [D], proto TCP (6), length 736) > : Flags: [PA] seq: ack: win: 64240
Заключение. Реализован аналог утилиты tcpdump на языке perl в OC Windows. Синтаксис командной строки по возможности сохранен.