Этичный Хакинг На Python: Сканер Портов

Этичный Хакинг На Python: Сканер Портов

foxy

Всем привет, в этой статье мы напишем собственную утилиту для сканирования открытых портов. Писать мы будем на нашем любимом Питоне ;3 Он будет многопоточным, поэтому в скорости не уступит даже nmap-у.

______________________________________

Теория

Работать мы будем с сокетами, поэтому давайте разберемся, что это такое. Если говорить по научному, то сокет (socket) - это программный интерфейс для обеспечения информационного обмена между процессами. Сокеты бывают клиентскими и серверными. Думаю из названия все понятно. Как же работает наша программа:

  1. Создаем сокет
s = socket.socket()

2. Посылаем его по нужному айпи и порту

3. Соответственно, если сокет дошел - порт открыт, если нет - закрыт

_______________________________________________

Кодинг

Для начала импортируем библиотеки:

import threading
import socket
from colorama import Fore, Back, Style, init

colorama нам нужна для более менее красивого интерфейса программы.

print(rf"{Fore.RED}Enter IP:")
ip = input()

Здесь мы берем на ввод ip нашей цели (вы можете сделать сразу input, но тогда colorama будет работать некорректно)

Так как сканер многопоточным - давайте введем функцию:

def portscan(port): 

Создаем сокет и выставляем Тайм Аут:

  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.settimeout(1)

Пытаемся подключиться к жертве:

  try:
  conn = s.connect((ip, port))
  print(rf"{Fore.GREEN}Port: {port} is open")
  conn.close()
  except:
  pass

Зададим список портов, по которым будем подключаться:

ports = [20, 21, 22, 23, 25, 38, 43, 80, 109, 110, 115, 118, 119, 143,
194, 220, 443, 445, 540, 585, 591, 1112, 1433, 1443, 3128, 3197, 3306, 3389, 4000, 
4333, 5100, 5432, 6669, 8000, 8080, 8443, 9014, 9200]

Запускаем потоки:

for port in ports:
  t = threading.Thread(target=portscan, kwargs={'port': port}).start()

Вот мы и написали сканер портов, как видите - ничего сложного.

Вот такой будет вывод (кстати, порт 3389 служит для удаленного подключения😉)

____________________________________________

Nmap

Это мощная утилита предназначена для сканирования узлов, определения уязвимостей и сканирования безопасности. В Kali Linux Nmap установлен изначально. А Windows можно скачать Zenmap GUI - Nmap с интерфейсом. Скачать можно отсюда. Как пользоваться zenmap на Windows я показывать не буду, т.к все предельно понятно. Cам по себе Nmap имеет очень много возможностей. Я покажу вам, как сканировать сайты на открытые порты.

nmap 154.220.221.171

Это полное сканирование сайта, может занять достаточно много времени, вот результат:

Как вы видите, результат очень даже неплохой, но заняло 222 секунды (качество интернета так же играет роль). Если вы нетерпеливые, то можете использовать флаг -F (сканируются не все порты):

nmap -F 154.220.221.171

На время не обращайте внимания, у вас будет гораздо быстрее. Как видите, количество портов заметно уменьшилось.

_________________________________________________

Кстати, бывает 6 разных состояний у портов:

открыт (open) - приложение принимает запросы на TCP соединение или UDP пакеты на этот порт. 

закрыт (closed) - Закрытый порт доступен (он принимает и отвечает на запросы Nmap), но не используется каким-либо приложение.

фильтруется (filtered) - Nmap не может определить, открыт ли порт, т.к. фильтрация пакетов не позволяет достичь запросам Nmap этого порта. 

не фильтруется (unfiltered) - Это состояние означает, что порт доступен, но Nmap не может определить открыт он или закрыт. 

открыт|фильтруется (open|filtered) - Nmap характеризует порт таким состоянием, когда не может определить открыт порт или фильтруется. 

закрыт|фильтруется (closed|filtered) - Это состояние используется, когда Nmap не может определить закрыт порт или фильтруется. Используется только при сканировании IP ID idle типа.


GitHub: https://github.com/montelisa/Port_Scan

Автор: foxy

Канал: Monte Lisa






Report Page