В этой статье мы напишем сканер портов на языке Python. С его помощью можно будет сканировать свои хосты на предмет открытых портов. Например, тот же Mikrotik Routerboard.
Приступаем к написанию.
Для написания сканера будем использовать модуль socket.
#!/usr/bin/env python
# -*- coding: utf_8 -*-
Импортируем модуль для работы с сокетами:
import socket
Вводим IP-адрес хоста, который будем сканировать:
host = raw_input("Введите ip адрес компьютера: ")
Создаем пустой список портов:
ports = []
При помощи функции xrange добавляем в список портов значения от 0 до 65535:
for i in xrange(65536):
ports.append(i)
Создаем пустой список, в который будут занесены открытые порты:
open_port = []
В цикле переберем все порты:
for port in ports:
Создаем новый сокет:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Устанавливаем таймаут, чтобы скрипт не приостанавливался, если сокет открыт:
sock.settimeout(0.01)
try:
Выполняем подключение:
sock.connect((host, port))
except:
Если подключиться не удалось, возникает исключение:
print ("Порт %s закрыт" % port)
else:
Если исключения не возникло, добавляем номер открытого порта в список open_port и выводим сообщение о том, что порт открыт:
open_port.append(port)
print ("Порт %s открыт." % port)
Закрываем сокет:
sock.close()
print "\033[34m Открытые порты\033[0m"
Выводим информацию об открытых портах:
print open_port
Выполним сканирование портов устройства Mikrotik Routerboard.
Рис.1. Запуск скрипта.
Запускаем скрипт для выполнения сканирования.
Рис.2. Ввод IP-адреса.
Скрипт предлагает ввести IP-адрес, который нужно просканировать.
Рис.3. Процесс сканирования.
В процессе работы скрипт проверяет весь заданный диапазон портов.
Рис.4. Результат работы сканера.
В результате работы сканер выдал список открытых портов, на которых запущены различные службы в Mikrotik Routerboard.
Евгений Рудченко специально для ASP24.