Уроки Python 16 // Сканируем порты
Иногда нужно узнать, какие порты открыты на удалённой машине. Это требуется для обеспечения информационной безопасности, а также может быть использовано для пинга (проверка доступности сервера). Используем для этого стандартный модуль socket который позволяет приконнектится к любому из портов, и если порт закрыт, выдает ошибку. Любую ошибку можно поймать с помощью конструкции
try:
какие-то команды где может быть ошибка
except:
команды которые выполнятся если произошла ошибка
else:
команды которые выполнятся если ошибки не произошло
Давайте напишем несложную программу которая сканирует большинство из известных сетевых портов
import socket, sys
mas = [20, 21, 22, 23, 25, 42, 43, 53, 67, 69, 80, 110, 115, 123, 137, 138, 139, 143, 161, 179, 443, 445, 514, 515, 993, 995, 1080, 1194, 1433, 1702, 1723, 3128, 3268, 3306, 3389, 5432, 5060, 5900, 5938, 8080, 10000, 20000]
host = input('Введите адрес сайта или IP адрес: ')
print ("Ждите, идёт пинг портов")
for port in mas:
s = socket.socket()
s.settimeout(1)
try:
s.connect((host, port))
except socket.error:
pass
else:
s.close
print (str(port) + ' порт активен')
Сперва в массиве mas перечисляем номера всех портов которые хотим пропинговать. Далее, в цикле for port in mas создаём сокет s = socket.socket(), устанавливаем паузу между сигналами s.settimeout(1), и пробуем подсоединиться к очередному порту s.connect((host, port)). Так как вся конструкция у нас заключена в ловушку для ошибок try-except то при наличии закрытого порта управление перейдет к блоку команд except socket.error: в котором расположена ничего не делающая команда-заглушка pass. Если же при подсоединении ошибки не произошло, значит порт открыт и выполнится блок команд else где мы закроем сокет, и напишем что данный порт активен.
Несложная программа позволяет сканировать сайты и компьютеры на наличие открытых портов.