"Сканер Портов" на Python. 1 часть.
BLACK CODEПишем свой аналог NMAP на Python. Часть 1.

Предупреждение! Я не профессионал, так что в теории могу ошибиться!
Всем привет! Это канал BLACK CODE. Сегодня мы начнём серию из 3-х статьей по созданию своего сканера портов на Python.
Установка Python
Если у вас нет Питона, то скачать вы его можете на официальном сайте.

В установке нет ничего сложного. Думаю, что вы разберётесь, а если появятся какие-то вопросы, то просто гуглите, ведь любой хороший программист должен уметь хорошо гуглить :).
Выбор среды разработки
В данном вопросе все очень индивидуально.
Кому-то нравится писать во встроенной IDLE(не советую её использовать).
Я могу порекомендовать очень классную IDE для Python, которая идеально подходить для новичков(и не только, я сам ей пользуюсь) - Wing 101, вы можете скачать её на официальном сайте.

Конечно, вы можете пользоваться и обычными редакторами кода - Sublime Text, Vim, VS Code и т.д. Ведь всё это - вкусовщина.
Библиотека Socket
Практически все современные ЯПы имеют библиотеки, а питон не исключение. Сегодня я расскажу о библиотеке Socket, с помощью неё мы и напишем сканер портов.
Если говорить простым языком, то Socket создана для сетевого программирования на Python, в основном это используется для обмена какими-либо данными.
Библиотека Socket уже изначально встроена в стандартный пакет Python'а.
Импорт socket в Python:
import socket
Чтобы создать сам сокет:
s = socket.socket()
У socket есть много функций, но сегодня мы будем рассматривать только две:
Подключение к серверу:
s = socket.socket()
s.connect(('адрес', порт))
Пример:
s = socket.socket()
s.connect(('google.com', 80))
Таймаут для подключения:
s = socket.socket()
s.settimeout(время)
Пример:
s = socket.socket()
s.settimeout(0.5)
Главная функция программы
Давайте теперь напишем главную функцию программы, где и будут происходить все основные действия:
def main(): # Главная функция
host = input('[*] Enter Host: ') # ввод сайта для сканирования
port = int(input('[*] Enter Port: ')) # ввод порта для сканирования
try: # пробуем сделать следующе е...
s = socket.socket() # создания сокета
s.settimeout(0.5) # задаём таймаут для подключения
scan = s.connect((host, port)) # пробуем подключится к данным, которые ввёл пользователь
print('[+] Host: ' + host + ' Port: ' + str(port) + ' - OPENED') # Если всё прошло без ошибкок, то выводим, что порт открыт
except socket.error: # если при выполнение произошла socket ошибка, то...
print('[-] Host: ' + host + ' Port: ' + str(port) + ' - CLOSED') # Выводим, что порт закрыт
Полный код программы
# -*- coding: utf-8 -*-
import socket # импорт библиотеки socket
def main(): # Главная функция
host = input('[*] Enter Host: ') # ввод сайта для сканирования
port = int(input('[*] Enter Port: ')) # ввод порта для сканирования
try: # пробуем сделать следующе е...
s = socket.socket() # создания сокета
s.settimeout(0.5) # задаём таймаут для подключения
scan = s.connect((host, port)) # пробуем подключится к данным, которые ввёл пользователь
print('[+] Host: ' + host + ' Port: ' + str(port) + ' - OPENED') # Если всё прошло без ошибкок, то выводим, что порт открыт
except socket.error: # если при выполнение произошла socket ошибка, то...
print('[-] Host: ' + host + ' Port: ' + str(port) + ' - CLOSED') # Выводим, что порт закрыт
main() # Вызов главной функции
Полный код программы(кликабельно)
Тестируем программу
Чтобы запустить программу на Python через Терминал(cmd) нужно переместиться в папку с программой при помощи "cd". (cd папка).
А после вводите python3 названиефайла.py(если не сработает, то пишите просто python).
Давайте протестируем программу, которую мы сегодня написали:

Всё отлично, работает! Порт 80 отвечает за HTTP соединение, так что он открыт на всех сайтах.
Чтобы запустить python файл в IDE (Wing 101) нужно просто нажать на кнопку "Run".
На этом всё, в первой части мы написали самый простейший сканер портов, который только можно себе представить, в следующих статьях будет что-то более серьёзное :). Подписывайтесь на BLACK CODE, чтобы не пропустить следующие статьи.
Надеюсь, что вы узнали что-то новое для себя.

Канал: BLACK CODE
Админ: @blackcode_admin