Статья [Python для хакера] - Часть 1. Начало.

Всех приветствую дорогие друзья! Долго думая, я решил начать цикл статей по сами знаете какой теме. В этой части я посмотрю , нужно ли вам это вообще. Вести я буду этот цикл параллельно с простыми уроками по питону. И собственно проводить в этом разделе. Т.к. относится это к хеку. Начнем)

Почему 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'))
Итог:

2017_11_27_02.24.57-1.png

2017_11_27_02.14.12-1-1.png

2017_11_27_01.44.49-1-1-1.png

2017_11_27_01.35.43-1-1-1-1.png


Надеюсь вам понравилась данная статья!

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


Буду признателен, если укажете орфографические ошибки.
 
Последнее редактирование:
M

MyrMyrBl9

У меня выбивает Invalid syntax и подсвечен except в функции fanc1()

Использую Python 3.4.3

Там же понятным английским языком все написано

Теперь я могу называть себя настоящим мамкиным хаЦкером!
Кстати, в коде вагонетка ошибок и недочетов (мб спецально? :unsure:). Пришлось многое править и дополнять. Довел дело до ума и получилась неплохая такая миним-программка с анимационной превьющкой. Код где то вышел строк на 500-600 (хз точно, у меня все по отдельным объектам разбито, для удобства).
Только начал изучать пайтон и этот урок подтолкнул к изучению сетевого программирования.
Спасибо за труд)
 
  • Нравится
Реакции: u7u

Skreemy

New member
26.09.2018
4
0
BIT
0
Привет, у меня не находит библиотеку termcolor, че делать?
 

explorer

Platinum
05.08.2018
1 080
2 475
BIT
0
Привет, у меня не находит библиотеку termcolor, че делать?

pip install termcolor

Если чего-то не хватает, всегда нужно это устанавливать. И всегда в трейсе будет написана причина неработоспособности, так что читайте вывод программы и устанавливайте необходимые модули.
 

Skreemy

New member
26.09.2018
4
0
BIT
0
pip install termcolor

Если чего-то не хватает, всегда нужно это устанавливать. И всегда в трейсе будет написана причина неработоспособности, так что читайте вывод программы и устанавливайте необходимые модули.
Да, спасибо, уже разобрался, просто я новичок в этой сфере и некоторые вещи мне даются с трудом))
 
Последнее редактирование:
M

MyrMyrBl9

Да, спасибо, уже разобрался, просто я новичок в этой сфере и некоторые вещи мне даются с трудом))

Держи сайт и сохрани в закладках
Вбиваешь там название библиотеки - напишет что вбивать в консоль и распишет что по чем там)
 
  • Нравится
Реакции: Alex Trim и explorer

Foxlite

New member
13.01.2019
3
0
BIT
0
Спасибо автору за старания я все делал с помощью termux и у меня возникли трудности с модулем termcolor, если кто то тоже делает это в termux то решается эта проблема вот так: pip install termcolor

До меня уже это писали, извините не заметил 😂😂😂
 
A

Akashi

Привет из 2019!

Интересная статья. Спасибо.
 

m0rse

New member
09.12.2019
1
0
BIT
3
лучше не использовать scan.settimeout(0.5), а то он быстро сканирует и не может найти порт
 

init_error

Green Team
07.06.2020
16
11
BIT
0
Что-то у меня библиотека termcolor тупит, у всех так? Или я особенный? Писал сам, пробовал так же скопипастить код автора, результат один и тот же :э
1591544087692.png
1591544087692.png
 

explorer

Platinum
05.08.2018
1 080
2 475
BIT
0
Что-то у меня библиотека termcolor тупит, у всех так? Или я особенный? Писал сам, пробовал так же скопипастить код автора, результат один и тот же :э
Просто termcolor не работает в Windows, пользуйтесь модулем .
 

init_error

Green Team
07.06.2020
16
11
BIT
0
Просто termcolor не работает в Windows, пользуйтесь модулем .
Почему нет? На Stackoverflow нашел решение, надо после:
from termcolor import colored
import socket
дописать:
import subprocess
subprocess.call('', shell=True)

После этого каракули исчезли, termcolor заработал :)
 

explorer

Platinum
05.08.2018
1 080
2 475
BIT
0
Почему нет? На Stackoverflow нашел решение, надо после:
from termcolor import colored
import socket
дописать:
import subprocess
subprocess.call('', shell=True)

После этого каракули исчезли, termcolor заработал :)

Это вы про суп из топора написали топор (termcolor) + крупа, соль (subprocess) = костыльное решение. Любые модули пишутся как независимое решение.
 
  • Нравится
Реакции: init_error

Devile_

Green Team
15.09.2020
26
20
BIT
0
А на винде библиотека termcolor работает??? И если ее заменять colorama, то тогда что импортировать вместо colored???

Почему нет? На Stackoverflow нашел решение, надо после:
from termcolor import colored
import socket
дописать:
import subprocess
subprocess.call('', shell=True)

После этого каракули исчезли, termcolor заработал :)
Не работает. Только что скопипастил...
 

Borjomy

Member
30.12.2020
16
0
BIT
0
Вроде ,как всё супер ,да вот только цвета не работают (модули есть всё есть)
 

Alex Trim

Green Team
12.07.2020
18
11
BIT
0
Спасибо за статью. Нашёл несколько опечаток в тексте:

Чтобы особо умные люди не задовали вопросов по типу
Чтобы особо умные люди не задавали вопросов по типу

Представьте себе реальный порт(те что с кораблями).
Представьте себе реальный порт (тот, что с кораблями).

Так вот корабль это определенный кусок данных(пакет),
Так вот, корабль это определённый кусок данных (пакет),

В этом порту с ним произойдет какие либо действия.
В этом порту с ним произойдут какие-либо действия.
 
  • Нравится
Реакции: vag4b0nd

reallyShould

Member
28.06.2020
6
0
BIT
1
В новом Python нужно заменить except scan.error на просто except. И порт должен быть преобразован в int()
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!