Простой сканер портов на Python

Для данной статьи мы используем модуль socket из стандартной библиотеки Python, а также стороннюю библиотеку colorama для цветного вывода.

Прежде коротко коснемся темы сокета.
Soket(разьем) — программный интерфейс для соединения двух процессов друг с другом. Можно представить его как корабль, который ищет пристань.

Идея сканера портов состоит в том, чтобы просмотреть список портов и проверить, открыты ли они. Возвращаясь к нашей метафоре корабля, заранее не известно, что находится на корабле. Таким образом, если порт открыт, корабль может, по крайней мере, пришвартоваться, прежде чем кто-либо узнает, должно ли быть там то, что несет корабль. С помощью нашего сканера портов мы просто пытаемся состыковаться с разными портами и больше ничего не делаем. Если нам разрешено стыковаться/подключаться к открытым портам, то мы знаем, по крайней мере, что порт открыт.

Следует отметить, что сканирование портов может рассматриваться или толковаться как преступление. Вы никогда не должны запускать сканер портов для любого веб-сайта или IP-адреса без явного письменного разрешения владельца сервера или компьютера, на который вы нацелены.

Нам понадобится установить следующее:


pip install colorama

Создадим файл с расширением .py.

import socket # для соединения
from colorama import init, Fore

# несколько цветов
init()
GREEN = Fore.GREEN
RESET = Fore.RESET
GRAY = Fore.LIGHTBLACK_EX

def is_port_open(host, port):
    """
    определяем, имеет ли `хост` открытый `порт` 
    """
    # создаем новый сокет
    s = socket.socket()
    try:
        # попытка присоединения к хосту через порт
        s.connect((host, port))
        # установите таймаут для чуть большей скорости
        #s.settimeout(0.2)
    except:
        # соединение не установлено, порт открыт!
        # возвращает false
        return False
    else:
        # соединение установлено, порт открыт! 
        return True

# адрес сайта вводит пользователь
host = input("Enter the host:")
# итерация по пртам , из диапазона от 1 до 1024
for port in range(1, 1025):
    if is_port_open(host, port):
        print(f"{GREEN}[+] {host}:{port} открыт      {RESET}")
    else:
        print(f"{GRAY}[!] {host}:{port} закрыт    {RESET}", end="r")

Вот и все, для простого сканера портов. То, что мы сделали выше, — это просто попытка подключения к порту. В случае успеха наша функция возвращает True, в противном случае — False. Если возвращается True, то наша маленькая программа распечатает успешный порт в консоли.

Как мы видим, средствами Python можно создать простейший сканер портов.

Источник