Этичный Хакинг На Python: Сканер Портов
foxyВсем привет, в этой статье мы напишем собственную утилиту для сканирования открытых портов. Писать мы будем на нашем любимом Питоне ;3 Он будет многопоточным, поэтому в скорости не уступит даже nmap-у.
______________________________________
Теория
Работать мы будем с сокетами, поэтому давайте разберемся, что это такое. Если говорить по научному, то сокет (socket) - это программный интерфейс для обеспечения информационного обмена между процессами. Сокеты бывают клиентскими и серверными. Думаю из названия все понятно. Как же работает наша программа:
- Создаем сокет
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