[Python для хакера] - Часть 1. Начало.
@webware
Всех приветствую дорогие друзья! Долго думая, я решил начать цикл статей по сами знаете какой теме. В этой части я посмотрю , нужно ли вам это вообще. Вести я буду этот цикл параллельно с простыми уроками по питону. И собственно проводить в этом разделе. Т.к. относится это к хеку. Начнем)
Почему Python?
1. Всем итак понятно, что его синтаксис очень и очень понятен.
2. Python имеет много плюшек. Очень много отличных библиотек зачастую повышающих функционал.
3. Python он и в Windows Python.
Как все будет?
Мы начнем с малого. Сегодня создадим простой сканер портов. А в конце цикла, напишем для себя простенький фреймворк с некоторым количеством полезностей)
Я постараюсь в разы облегчить все что мы будем писать. Ну и как же без практики? Конечно же будут задания! Куда без них.
Пишем простой сканер портов.
Чтобы особо умные люди не задовали вопросов по типу
Зачем писать если есть nmap?
Отвечаю сразу: А затем, чтобы вырваться из объятий ламера и уметь самомуг@вн@кодить писать тулзы.
Для начала обсудим, как же будет работать наш "Hello, world!" в этой сфере)
Для совсем не знающих о портах представляю свои обьяснения ниже:
Постараюсь обойтись без терминов. Представьте себе реальный порт(те что с кораблями). Так вот корабль это определенный кусок данных(пакет), он движется по определенному пути(каналу) к определенному порту. В этом порту с ним произойдет какие либо действия. Этот карабль(пакет) могут разгрузить(получить ланные) , а могут послать подальше если порт закрыт на ремонт.
А вот теперь поговорим про закрытые порты и открытые порты.
Порт закрыт - это значит что установить соединение с этим портом нельзя.
Открытый порт - аналогично, это порт с которым можно установить соединение и обменятся информацией.
Разберемся пока что с этим. Вернемся к обсуждению алгоритма работы нашего простенького сканера.
1. Спрашивает тип. 2. Спрашивает данные. 3. Создает сокет 4. Подключается к host:port 5. Определяет открыт или закрыт. 6. Красиво выводит)
Да, ребятки, мы будем сегодня пользоватся сокетами. И вообще с ними будем очень часто работать в этом цикле.
Сокет - коротко говоря, интерфейс для обмена данными между устройствами.
Приступим к написанию нашего кода.
1. Подключаем библиотеки. Нам понадобятся 2-е библиотеки, socket и termcolor( отдельное спасибо DarkNode)
from termcolor import colored import socket
2. А теперь создадим "меню". Программа будет спрашивать у нас. Сканировать список "популярных портов", или только то, что напишм мы.
...
print("~"*50)
print("\t[1] --- сканировать отделный порт")
print("\t[2] --- сканировать список")
print("~"*50, "\n")
text_a = input("[scan]--> ")
if text_a == "1":
fanc1()
elif text_a == "2":
fanc2()
else:
print(colored("Параметр введен не правильно!", 'red'))
...
Эту часть кода пока что не пишите! Ее мы используем в конце.
3. Начнем с функции 1.
color_a = colored("[+] ", 'green')
print("~"*50)
host = input(color_a + "Host --> ")
port = int(input(color_a + "Port --> "))
print("~"*50)
Для декора можно использовать декораторы, но я не стал настолько все усложнять.
Теперь создадим сокет
scan = socket.socket()
Теперь коннектимся и определяем
color_b = colored("[!] ", 'red')
color_c = colored("[!] ", 'yellow')
try:
scan.connect((host, port))
except scan.error:
print(color_b + "Port -- ", port, " -- [CLOSED]")
else:
print(color_c + "Port -- ", port, " -- [OPEN]")
Тут все просто. Если не удалось соедениться, то порт закрыт. Если приконнектились, то соответственно открыт ;)
Все это поместим в функцию fanc1().
def fanc1():
color_a = colored("[+] ", 'green')
print("~"*50)
host = input(color_a + "Host --> ")
port = int(input(color_a + "Port --> "))
print("~"*50)
scan = socket.socket()
color_b = colored("[!] ", 'red')
color_c = colored("[!] ", 'yellow')
try:
scan.connect((host, port))
except scan.error:
print(color_b + "Port -- ", port, " -- [CLOSED]")
else:
print(color_c + "Port -- ", port, " -- [OPEN]")
4. Вторая функция)
Тут все на мноого проще. Спросим у пользователя только хост. А порты зададим в список. Естественно проверять их будем еще и циклом
def fanc2():
color_a = colored("[+] ", 'green')
color_b = colored("[!] ", 'red')
color_c = colored("[!] ", 'yellow')
host = input(color_a + "Host --> ")
port = [20, 21, 22, 23, 42, 43, 53, 67, 69, 80]
В список port можете добавить какие хотите порты. Я для примера добавил малость. А теперь к самому интересному. В цикле повторим прошлые действия(немного видоизменив)
...
for i in port:
try:
scan = socket.socket()
scan.connect((host, i))
except scan.error:
print(color_b + "Port -- ", i, " -- [CLOSED]\n")
else:
print(color_c + "Port -- ", i, " -- [OPEN]\n")
И все вместе(функция 2)
def fanc2():
color_a = colored("[+] ", 'green')
color_b = colored("[!] ", 'red')
color_c = colored("[!] ", 'yellow')
host = input(color_a + "Host --> ")
port = [20, 21, 22, 23, 42, 43, 53, 67, 69, 80]
for i in port:
try:
scan = socket.socket()
scan.settimeout(0.5)
scan.connect((host, i))
except scan.error:
print(color_b + "Port -- ", i, " -- [CLOSED]")
else:
print(color_c + "Port -- ", i, " -- [OPEN]")
Также для быстроты сканирования я добавил строчку
scan.settimeout(0.5)
Я был удивлен результатом, но он очень быстро начал сканировать.
А теперь осталось все соединить.
# -*- coding:utf -8 -*-
from termcolor import colored
import socket
def fanc1():
color_a = colored("[+] ", 'green')
print("~"*50)
host = input(color_a + "Host --> ")
port = int(input(color_a + "Port --> "))
print("~"*50)
scan = socket.socket()
color_b = colored("[!] ", 'red')
color_c = colored("[!] ", 'yellow')
try:
scan.connect((host, port))
except socket.error:
print(color_b + "Port -- ", port, " -- [CLOSED]")
else:
print(color_c + "Port -- ", port, " -- [OPEN]")
def fanc2():
color_a = colored("[+] ", 'green')
color_b = colored("[!] ", 'red')
color_c = colored("[!] ", 'yellow')
host = input(color_a + "Host --> ")
print("\n")
port = [20, 21, 22, 23, 42, 43, 53, 67, 69, 80]
for i in port:
try:
scan = socket.socket()
scan.settimeout(0.5)
scan.connect((host, i))
except socket.error:
print(color_b + "Port -- ", i, " -- [CLOSED]")
else:
print(color_c + "Port -- ", i, " -- [OPEN]")
print("~"*50)
print("\t[1] --- сканировать отделный порт")
print("\t[2] --- сканировать список")
print("~"*50, "\n")
text_a = input("[scan]--> ")
if text_a == "1":
fanc1()
elif text_a == "2":
fanc2()
else:
print(colored("Параметр введен не правильно!", 'red'))
Итог:




Надеюсь вам понравилась данная статья!
Ваше задание будет очень простым. На первый раз просто разберитесь в выше мною написанном и просканируйте порты любого сайта))