Предыдущая статья о Python была посвящена удаленному сбору информации о системе, в этой статье я поделюсь с вами простым скриптом на Python, который сканирует порты, чтобы найти открытый порт и получить информацию о службах, работающих на этом порту.
Еще по теме: Анализ вредоносных программ на Python
Python для сканирования портов и получения информации о службах
Библиотека сокетов в Python используется для установления соединения [TCP или UDP].
Функция proghelp используется, чтобы показать использование, если есть какая-то ошибка при запуске программы.
sys.argv используется для получения аргумента командной строки из консоли. Требуется 2 аргумента с именем программы, то есть IP-адрес и порт для сканирования.
Функция Scan () принимает два параметра: IP-адрес и номер порта. socket.gethostbyname (ip) преобразует доменное имя в IP-адрес (поскольку машины работают с цифрами).
port1 = int (port) преобразует номер порта в целое число, потому что мы взяли значение порта из командной строки, и все, что мы вводим в командную строку в python, рассматривается как строка. Итак, нам нужно преобразовать его в int, чтобы это работало.
При использовании программирования сокетов в python могут возникать определенные исключения, которые могут быть вызваны неразрешенным именем хоста, ошибкой соединения и т. Д. Хорошая привычка для написания сценариев — помещать определенный код в блок try и except.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import socket import sys import string def proghelp(): '''***Printing Help A Simple socket script that is used to test if the port is open and grab its banner Usage: prog.py ipaddress port ''' if len(sys.argv) < 3: print("Not Enough Arguments.") print(proghelp.__doc__) print("Program Exiting...") exit() ip=sys.argv[1] port=sys.argv[2] def scan(ip, port): ip1 = socket.gethostbyname(ip); port1=int(port) print("Scanning IP address: "+ip +" : "+ip1+":"+port) try: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) r= s.connect_ex((ip1,port1)) if r == 0: print("IP Address: "+ip) print("Port "+ port+" is open.") bann= s.recv(1024) return bann.decode('utf-8').strip() else: print("Port is Closed...") exit() except socket.error as err: return except socket.gaierror: return print(scan(sys.argv[1],sys.argv[2])) |
Я написал этот скрипт для сканирования только одного порта. Вы можете доработать скрипт и сканировать больше портов.
Еще по теме: Взлом WiFi-сетей используя Python