Приветствую всех, кто интересуется данной темой. Сегодня мы будем писать свой аналог nmap'а, те сканер открытых портов Вот что должно в итоге получиться: Писать это все дело мы будем на Python 3 + Ну и приступим. Для начала естественно импортируем нужные модули, а именно 'socket' и 'time'. # -*- coding:utf -8 -*- import socket import time Код # -*- coding:utf -8 -*- import socket import time Далее создадим первую и единственную функцию def scan(): host = input("[!] Host --> ") # Тут мы вводим адрес сайта, который мы хотим сканировать print() port = [20, 21, 22, 23, 42, 43, 53, 67, 69, 80, 110, 139, 8000, 8080, 3128, 3389, 6588, 1080, 5900, 8888, ] # Список, тут лежат порты # Я добавил одни из самых популярных, если хотите, то можете добавить те, которые вам нужны for i in port: # В данном цикле мы просто перебираем порты и пытаемся подключиться по ним подключиться try: scan = socket.socket() scan.settimeout(0.5) # Выставление таймаута, чтобы нас не забанило scan.connect((host, i)) # Как раз попытка подключиться к хосту через перебираемые порты except socket.error: # Здесь мы ставим условие, что если произошла ошибка, то программа на выведет, что данный порт закрыт print("[-] Port -- ", i, " -- [CLOSED]") else: # А в противном случае, если ошибки не было, то программа выведет, что порт открыт print("[+] Port -- ", i, " -- [OPEN]") Код def scan(): host = input("[!] Host --> ") # Тут мы вводим адрес сайта, который мы хотим сканировать print() port = [20, 21, 22, 23, 42, 43, 53, 67, 69, 80, 110, 139, 8000, 8080, 3128, 3389, 6588, 1080, 5900, 8888, ] # Список, тут лежат порты # Я добавил одни из самых популярных, если хотите, то можете добавить те, которые вам нужны for i in port: # В данном цикле мы просто перебираем порты и пытаемся подключиться по ним подключиться try: scan = socket.socket() scan.settimeout(0.5) # Выставление таймаута, чтобы нас не забанило scan.connect((host, i)) # Как раз попытка подключиться к хосту через перебираемые порты except socket.error: # Здесь мы ставим условие, что если произошла ошибка, то программа на выведет, что данный порт закрыт print("[-] Port -- ", i, " -- [CLOSED]") else: # А в противном случае, если ошибки не было, то программа выведет, что порт открыт print("[+] Port -- ", i, " -- [OPEN]") Далее делаем design и меню естественно print("-" * 50) print("\t[1] --- сканировать") print("-" * 50, "\n") text_a = input("[scan]---> ") print() if text_a == "1": scan() else: print('Выбранное действие не существует') print() print("-" * 50) print() time.sleep(1) input('Для выхода нажмите ENTER: ') Код print("-" * 50) print("\t[1] --- сканировать") print("-" * 50, "\n") text_a = input("[scan]---> ") print() if text_a == "1": scan() else: print('Выбранное действие не существует') print() print("-" * 50) print() time.sleep(1) input('Для выхода нажмите ENTER: ') Далее можете это все скомпилировать в exe шник, но перед этим нужно установить доп модуль 'pyinstaller' Для этого заходим в cmd(если у вас винда), если линукс, то терминал и пишем pip3 install pyinstaller или pip install pyinstaller (Если первый вариант не работает, то делайте второй) Код pip3 install pyinstaller или pip install pyinstaller (Если первый вариант не работает, то делайте второй) Далее, после установки библиотеки открываем так же cmd(терминал) и с помощью команды 'cd' перемещаемся в директорию, где лежит данный пайтон файл. Когда переместились и в cmd(терминале) пишется расположение директории, где лежит ваш .py файл. Тогда вводим в консоль следующее pyinstaller --onefile <название файла.py> допустим C:\User\Desktop\Python\ScanPort> pyinstaller --onefile scaner.py (это так должно выглядеть в итоге, не надо водить C:\User и тд Код pyinstaller --onefile <название файла.py> допустим C:\User\Desktop\Python\ScanPort> pyinstaller --onefile scaner.py (это так должно выглядеть в итоге, не надо водить C:\User и тд Далее, когда в консоли все прошло, то мы идем в ту директорию и там появилась папка 'dist', в которой и лежит наш exe-шник Всем спасибо за прочтение, учите пайтон, всего хорошего P.S. От симпы не откажусь Весь код # -*- coding:utf -8 -*- import socket import time def scan(): host = input("[!] Host --> ") # Тут мы вводим адрес сайта, который мы хотим сканировать print() port = [20, 21, 22, 23, 42, 43, 53, 67, 69, 80, 110, 139, 8000, 8080, 3128, 3389, 6588, 1080, 5900, 8888, ] # Список, тут лежат порты # Я добавил одни из самых популярных, если хотите, то можете добавить те, которые вам нужны for i in port: # В данном цикле мы просто перебираем порты и пытаемся подключиться с помощью try: scan = socket.socket() scan.settimeout(0.5) # Выставление таймаута, чтобы нас не забанило scan.connect((host, i)) # Как раз попытка подключиться к хосту через перебираемые порты except socket.error: # Здесь мы ставим условие, что если произошла ошибка, то программа на выведет, что данный порт закрыт print("[-] Port -- ", i, " -- [CLOSED]") else: # А в противном случае, если ошибки не было, то программа выведет, что порт открыт print("[+] Port -- ", i, " -- [OPEN]") print("-" * 50) print("\t[1] --- сканировать") print("-" * 50, "\n") text_a = input("[scan]---> ") print() if text_a == "1": scan() else: print('Выбранное действие не существует') print() print("-" * 50) print() time.sleep(1) input('Для выхода нажмите ENTER: ') Код # -*- coding:utf -8 -*- import socket import time def scan(): host = input("[!] Host --> ") # Тут мы вводим адрес сайта, который мы хотим сканировать print() port = [20, 21, 22, 23, 42, 43, 53, 67, 69, 80, 110, 139, 8000, 8080, 3128, 3389, 6588, 1080, 5900, 8888, ] # Список, тут лежат порты # Я добавил одни из самых популярных, если хотите, то можете добавить те, которые вам нужны for i in port: # В данном цикле мы просто перебираем порты и пытаемся подключиться с помощью try: scan = socket.socket() scan.settimeout(0.5) # Выставление таймаута, чтобы нас не забанило scan.connect((host, i)) # Как раз попытка подключиться к хосту через перебираемые порты except socket.error: # Здесь мы ставим условие, что если произошла ошибка, то программа на выведет, что данный порт закрыт print("[-] Port -- ", i, " -- [CLOSED]") else: # А в противном случае, если ошибки не было, то программа выведет, что порт открыт print("[+] Port -- ", i, " -- [OPEN]") print("-" * 50) print("\t[1] --- сканировать") print("-" * 50, "\n") text_a = input("[scan]---> ") print() if text_a == "1": scan() else: print('Выбранное действие не существует') print() print("-" * 50) print() time.sleep(1) input('Для выхода нажмите ENTER: ')
Можно ещё написать сканер диапазонов IP адресов на один порт. Моногопоточный, иначе сканить будет до конца света. И желательно реализовать поддержку не только CIDR но и IP Ranges. Хорошая штука получится!