Python, Этичный хакинг с Python

#8 Кодинг простого сканера портов. Этичный хакинг с Python

Здравствуйте, дорогие друзья.  Рассмотрим самописные инструменты для сканирования.

Теперь, прежде чем мы начнем писать код, давайте посмотрим, что на самом деле означает сканирование.

В Kali Linux есть инструмент, который называется nmap.

 Он позволяет нам сканировать цель на наличие открытых портов, которые могут потенциально запускать программы на машине, которую будем атаковать.

Первая часть фактического сбора информации о цели — это проверка на открытые порты.

И мы также хотим посмотреть, какую версию программного обеспечения они используют на этих открытых портах.

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

Для наглядности, протестируем, как все работает с помощью Nmap, введя в терминале команду: (nmap 10.0.2.7):

nmap сканирование

Видим открытые порты, с помощью которых мы сможем реализовать дальнейший вектор атаки. Но сейчас не об этом.

Итак, давайте попробуем написать код простейшего сканера портов.

Давайте создадим актуальную директорию, в которую мы будем сохранять только файлы для нашего сканирования. У меня это Desktop/Python/portscanner:

директория для сохранения проектов

Назовем программу «portscanner».

Я буду использовать редактор «Nano», для написания кода:

nano portscan.py

Давайте попробуем написать простой сканер портов, который будет просто сканировать простой порт.

Так как мы можем это сделать? Разумеется, начнем мы с начала написания скрипта на языке программирования Python, записью: «#!/usr/bin/python»:

nano portscanner

Первым делом импортируем библиотеку socket, для импорта функций соответственно.
Мы хотим создать объект сокета, а затем выполнить функцию, которая на самом деле будет подключаться к самому порту.
Таким образом, для создания объекта сокета может иметь немного хитрый синтаксис.

Поэтому обязательно следуйте за мной, вы можете называть его как угодно. В моем случае — это переменная «sock», и мы хотим сделать его объектом сокета.

Как нам это делать?

Мы просто после знака равенства, открываем и закрываем скобки, и внутри скобок вводим сокет, через точку и символ подчеркивания AF_INET, запятая сокет точка, socket.SOCK_STREAM:

import socket

Вот так мы на самом деле определяем сам объект сокета, и мы фактически помещаем его в качестве значения для этой переменной SOCK.

Запись socket.AF_INET, обозначает IP адрес.

Таким образом, мы будем выполнять подключение к IP-адресу перед хостом, который является IP-адресом для него, а не IP-адресом 6.

Мы будем пытаться выполнить трехстороннее рукопожатие с каждым портом хоста.

Но сейчас давайте просто попробуем выполнить это только с одним портом, а затем посмотрим, как мы можем на самом деле сканировать несколько портов, а не только один.

Пишем далее код, и нам нужно ввести адрес хоста машины, которую будем сканировать на открытые порты.

Можем просто выбрать любой IP-адрес, который вы хотите, например, IP-адрес вашего текущего компьютера.

Таким образом, Вы можете сканировать себя или IP-адрес вашего фактического основного P.C. или Windows машину например.

В моем случае, IP-адрес машины будет выглядеть как «10.0.2.7», а запись примет вид: host = „10.0.2.7“:

host = "10.0.2.7"

Нам нужно указать порт, поэтому давайте его пропишем например, порт 447, и,  мы попытаемся выполнить функцию подключения к этому порту на этом хосте:

port = 447

Напомню, что это самый простой сканер портов, который вы можете сделать и мы напишем более продвинутый.

Давайте попробуем подключиться, чтобы сделать это, нам нужно создать функцию def. Далее вводим в скобках порт.

Чтобы объявить функцию в Python, вам нужно использовать def перед ней. Тогда сканер портов — это имя функции, которую мы хотим создать, а порт — аргумент.

Теперь после этого все, что нужно сделать, это указать двоеточие, что в основном означает, что код ниже, будет частью самой функции:

def portscanner(port)

После этого нужно нажать на ввод, и применить табуляцию.
Если sock.connect_ соединяется с подчеркиванием ex через нижнее подчеркивание, а затем в sock.connect_ вы указываете двойное открытие
двойные закрытые скобки и внутри них вы указываете код: ((host,port)). Не забываем про двоеточие в конце строки:

sock.connect_ex((host, port)):

Далее нужно дописать код с условными операторами. Код будет выглядеть вот так: «if sock,connect__ex((host.port)):

                   print «Port %d is closed» % (port)

         else:

                   print «Port %d is opened» % (port)»:

         portscanner(port):

Так что это наш самый простой сканер портов.

Давайте протестируем нашу программу, предварительно задав параметры на выполнение:

port 447 is closed

Как видим, программа сработала корректно.

Изменим значение порта, предварительно просканировав машину на Linux (Metasploitable2). Нас интересуют открытые порты:

итог сканирования портов

Видим, что выбор есть. Остановимся на 80 порту, и отредактируем это значение в коде:

port = 80

Как видим порт 80 открыт, о чем нас уведомляет программа:

port 80 is opened

На этом все. Всем хорошего дня!

Читайте предыдущие статьи:

Первая часть: Этичный хакинг с Python.

Вторая часть: Этичный хакинг с Python.

Третья часть: Этичный хакинг с Python.

Четвертая часть: Этичный хакинг с Python.

Пятая часть. Этичный хакинг с Python.

Шестая часть. Этичный хакинг с Python.

Седьмая часть. Этичный хакинг с Python.