Сканер портов на Python

Сканер портов на Python

Учить только сухую теорию мне было неинтересно, поэтому одной из первых программ, которые я написал на Python был сканер портов. С помощью него можно посмотреть, какие порты открыты на определённом IP адресе или доменном имени. Это может быть полезно для анализа безопасности, чтобы выявить открытые порты, и при необходимости, закрыть их. С помощью похожих сканеров, хакеры сканируют порты компьютеров, которые хотят взломать. сканер портов на Python Сперва приведу код программы, а ниже объясню каждую строчку.

import socket
import 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]
print ("Простейший сканер портов на питоне")
print (" ")
host = input('Введите имя сайта или IP адрес: ')
print ("--------------------------------")
print ("Ожидайте идёт сканирование портов!")
print ("--------------------------------")
for port in mas:
    s = socket.socket()
    s.settimeout(1)
    try:
        s.connect((host, port))
    except socket.error:
        pass
    else:
        s.close
        print (host + ': ' + str(port) + ' порт активен')
print ("--------------------------------")
print ("Процесс завершен")
Теперь рассмотрим каждый кусочек этой программы. Вначале идёт подключение модулей - socket отвечает за взаимодействие с сетью через сокеты, sys - системный модуль общего назначения.
import socket
import 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]
Пишем пояснительные надписи, и ожидаем ввода Ip адреса или имени домена в переменную host.
print ("Простейший сканер портов на питоне")
print (" ")
host = input('Введите имя сайта или IP адрес: ')
print ("--------------------------------")
print ("Ожидайте идёт сканирование портов!")
print ("--------------------------------")
Основная часть кода представляет собой цикл, в котором мы по очереди пытаемся приконнектиться к портам из списка mas. Если это не удаётся выполняется команда pass которая служит заглушкой - она ничего не делает. Если же какой то порт открыт мы печатаем об этом сообщение.
for port in mas:
    s = socket.socket()
    s.settimeout(1)
    try:
        s.connect((host, port))
    except socket.error:
        pass
    else:
        s.close
        print (host + ': ' + str(port) + ' порт активен')
В самом конце, после проверки всех портов данного домена или IP адреса, нужно уведомить о завершении работы сканера.
print ("--------------------------------")
print ("Процесс завершен")
У нас получился очень простой сканер портов на Python. Его можно бесконечно улучшать, например создать для него графический интерфейс на PyQT, сделать сканирование в несколько потоков, автоматическую смену UserAgent, чтобы избежать блокировки от сканируемого сервера.

Сканер портов на Python Лого Pythono.ru Сканер портов на Python