Найти в Дзене

Сканирование и отображение открытых TCP и UDP портов в Windows 11.

Вот пример программы на Python. Программа использует модуль socket для проверки портов и threading для ускорения процесса сканирования. import socket import threading import time from queue import Queue # Цветной вывод для консоли class Colors: GREEN = '\033[92m' RED = '\033[91m' RESET = '\033[0m' # Функция проверки TCP порта def scan_tcp_port(ip, port, result_queue): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) try: result = sock.connect_ex((ip, port)) if result == 0: result_queue.put(('TCP', port, 'open')) else: result_queue.put(('TCP', port, 'closed')) except Exception: result_queue.put(('TCP', port, 'error')) finally: sock.close() # Функция проверки UDP порта def scan_udp_port(ip, port, result_queue): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(1) try: sock.sendto(b'', (ip, port)) sock.recvfrom(102

Вот пример программы на Python.

Программа использует модуль socket для проверки портов и threading для ускорения процесса сканирования.

import socket

import threading

import time

from queue import Queue

# Цветной вывод для консоли

class Colors:

GREEN = '\033[92m'

RED = '\033[91m'

RESET = '\033[0m'

# Функция проверки TCP порта

def scan_tcp_port(ip, port, result_queue):

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.settimeout(1)

try:

result = sock.connect_ex((ip, port))

if result == 0:

result_queue.put(('TCP', port, 'open'))

else:

result_queue.put(('TCP', port, 'closed'))

except Exception:

result_queue.put(('TCP', port, 'error'))

finally:

sock.close()

# Функция проверки UDP порта

def scan_udp_port(ip, port, result_queue):

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.settimeout(1)

try:

sock.sendto(b'', (ip, port))

sock.recvfrom(1024)

result_queue.put(('UDP', port, 'open'))

except socket.timeout:

result_queue.put(('UDP', port, 'open/filtered')) # UDP не всегда точно определяет закрытые порты

except Exception:

result_queue.put(('UDP', port, 'closed'))

finally:

sock.close()

# Основная функция сканирования

def scan_ports(ip, start_port, end_port, protocol='both'):

print(f"Сканирование портов {start_port}-{end_port} на {ip}...")

result_queue = Queue()

threads = []

# Создаем потоки для каждого порта

for port in range(start_port, end_port + 1):

if protocol in ['tcp', 'both']:

t_tcp = threading.Thread(target=scan_tcp_port, args=(ip, port, result_queue))

threads.append(t_tcp)

t_tcp.start()

if protocol in ['udp', 'both']:

t_udp = threading.Thread(target=scan_udp_port, args=(ip, port, result_queue))

threads.append(t_udp)

t_udp.start()

# Ждем завершения всех потоков

for thread in threads:

thread.join()

# Собираем результаты

results = []

while not result_queue.empty():

results.append(result_queue.get())

# Сортируем результаты по портам

results.sort(key=lambda x: x[1])

# Выводим результаты

print("\nРезультаты сканирования:")

for proto, port, status in results:

if status == 'open' or status == 'open/filtered':

print(f"{Colors.GREEN}{proto} порт {port}: {status}{Colors.RESET}")

else:

print(f"{Colors.RED}{proto} порт {port}: {status}{Colors.RESET}")

# Основной блок программы

if __name__ == "__main__":

# Параметры сканирования

target_ip = "127.0.0.1" # Локальный хост, можно заменить на любой IP

start_port = 1

end_port = 1024 # Сканируем порты до 1024 (можно увеличить)

protocol = "both" # 'tcp', 'udp' или 'both'

# Запуск сканирования

start_time = time.time()

scan_ports(target_ip, start_port, end_port, protocol)

end_time = time.time()

print(f"\nСканирование завершено за {end_time - start_time:.2f} секунд")

Особенности программы:

Многопоточность: Используется модуль threading для параллельного сканирования портов, что значительно ускоряет процесс.

TCP и UDP: Программа проверяет как TCP, так и UDP порты. Для UDP используется отправка пустого пакета и ожидание ответа (учтите, что UDP-порты сложнее сканировать точно из-за их природы).

Цветной вывод: Открытые порты отображаются зеленым, закрытые — красным.

Настраиваемость: Можно указать диапазон портов, IP-адрес и тип протокола (tcp, udp или both).

Таймаут: Установлен таймаут в 1 секунду для каждого порта, чтобы избежать долгого ожидания.

Требования:

Python 3.x (поставляется с Windows 11, если установлен).

Запуск программы с правами администратора для корректного сканирования некоторых портов.

Убедитесь, что брандмауэр Windows не блокирует соединения, иначе результаты могут быть неточными.

Как использовать:

Сохраните код в файл, например, port_scanner.py.

Откройте терминал (PowerShell или CMD) с правами администратора.

Перейдите в папку с файлом: cd путь_к_папке.

Запустите программу: python port_scanner.py.

При необходимости измените в коде:

target_ip — IP-адрес целевого хоста (например, 192.168.1.1).

start_port и end_port — диапазон портов.

protocol — тип протокола (tcp, udp, both).

Примечания:

Сканирование большого диапазона портов (например, 1–65535) может занять много времени. Для теста используйте небольшой диапазон (1–1024).

UDP-сканирование менее надежно, так как некоторые порты могут отображаться как open/filtered из-за отсутствия ответа.

Если вы хотите сканировать удаленный хост, убедитесь, что у вас есть разрешение, так как несанкционированное сканирование может быть незаконным.

Если вам нужна более специфическая функциональность (например, работа с конкретными портами или интеграция с брандмауэром Windows), дайте знать!