Этичный Хакинг На 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 служит для удаленного подключения😉)
____________________________________________
Это мощная утилита предназначена для сканирования узлов, определения уязвимостей