Python в ИБ. Часть 9. Сканер портов на Python
Cегодня мы создадим простой сканер портов. Тема достаточно заезженная, но это не повод обходить её стороной, тем более, есть шанс, что кто-то хочет попробовать сделать всё своими силами.
Для простоты понимания наш сканер будет достаточно простой и претендовать на функционал nmap’a он, конечно, не будет.
Напишем простой сканер TCP-портов с выбором диапазона или отдельного порта.
Для реализации нам понадобится несколько базовых библиотек, ничего дополнительно устанавливать не надо.
Библиотека argparse позволит нам удобнее обрабатывать передаваемые аргументы.
Далее заведём отдельный словарь для хранения проверенных портов, а также напишем функцию парсинга параметра “порт”, передаваемого через командную строку.
После сделаем функцию, для создание нашего парсера аргументов.
Создаётся объект класса ArgumentParser, в который с помощью метода add_argument устанавливаются различные аргументы и их настройки. Использование данной библиотеке облегчает создание Usage записей и в целом придаёт скрипту небольшой интерфейс, теперь при неверном запуске будет выдаваться примерно следующее сообщение.
Сообщение достаточно информативное и в нём отображаются используемые ключи для запуска, которые и были добавлены через метод add_argument.
Далее создаём основную функцию и прописываем ей весь остальной необходимый функционал.
ратко пробежимся по основным моментам, которые могут быть непонятны.
- строка 27 – в переменную args помещается объект с распарсенными аргументами, к которым можно обращаться, как к свойствам объекта (см. стр. 29, 30)
- строка 30 – в ports помещается список портов (или один порт), которые необходимо просканировать.
- Внутри цикла происходит создание сокета и попытка подключения к порту в течении 3 секунд. Если попытка не успешна, то порт помечается как неактивный, в противном случае, как активный.
- После завершения сканирования выводятся только активные порты.
Можно сканировать как один порт, так и диапазон (показано на примере в первой команде)
Это только небольшая функциональная основа, на которую мы будем нанизывать новые функции и расширять его. В следующем уроке попробуем добавить многопоточность, для ускорения работы сканера.
Оставайтесь с нами…