Beim letzten Mal ([Python] Python und Security-② Port Scanning Tool Made with Python) habe ich die Umrisse und Funktionen von Python untersucht. Dieses Mal erstellen wir mit Python ein einfaches Tool zum Scannen von Ports. Darüber hinaus ist es mit dem Tool möglich, Dienste zu überprüfen und auf diese zu reagieren, die unachtsam arbeiten.
** Da es sich um das Sammeln von Informationen handelt, "Banner Grabbing", ist es ein Verbrechen, das an einem nicht autorisierten Subjekt ausgeführt wird. Bitte beachten Sie, dass wir nicht für Probleme mit diesem Artikel verantwortlich sind. ** ** **
Der Port-Scan dient zum Suchen und Identifizieren eines Ports, der für den Zielserver oder das Netzwerkgerät geöffnet ist. Durch Überprüfen der offenen Ports ist es möglich, die vom Ziel ausgeführten Dienste zu überprüfen. Für einen Angreifer kann das Scannen von Ports als Vorbereitung für einen Angriff angesehen werden.
** Folgende Arten von Port-Scans sind möglich **
UDP Port Scan Beim UDP-Scan wird der Port mit dem UDP-Protokoll gescannt. Wenn der Port geöffnet ist, gibt es keine Antwort vom Ziel, aber wenn er geschlossen ist, gibt es eine ICMP-Nachricht (Ziel nicht erreichbar, Port nicht erreichbar). UDP-Scan ist jedoch weniger zuverlässig, da Pakete eher von Routern und Firewalls verloren gehen.
TCP Connect Scan(TCP Open Scan) Ein Scan, der die Funktion connect () verwendet, um das Ziel mit 3-Wege-Handshaking zu verbinden und nach offenen Ports zu suchen. Es ist zuverlässig und Sie können ohne Root und Berechtigungen scannen, aber der Scan ist langsam und protokolliert.
TCP Half-Open Scan(SYN Stealth Scan) Im Gegensatz zu TCP Connect Scan bildet Half-Open Scan, auch als SYN-Scan bezeichnet, keine vollständige Sitzung mit 3-Wege-Handshaking und verwendet nur SYN-Pakete, um den Port zu überprüfen. Es ist kein Protokoll mehr vorhanden, für die Implementierung sind jedoch Root-Berechtigungen erforderlich.
** Warum benötigen Sie Root-Rechte? ** Da das Steuerbit im Header des TCP-Protokolls gesetzt werden muss, kann das SYN-Scannen nur mit Root-Rechten durchgeführt werden. ** Warum gibt es kein Protokoll? ** Wenn eine SYN / ACK-Antwort vom Ziel empfangen wird, wird das auf RST eingestellte Paket als Antwort anstelle von ACK gesendet. Da das Paket RST ist, wird die Kommunikation zwangsweise beendet und die Kommunikationseinstellung wird nicht abgeschlossen (Verbindung der Sitzung), sodass eine hohe Wahrscheinlichkeit besteht, dass kein Protokoll im System verbleibt.
FIN/NULL/Xmas Scan Die drei Scans sind TCP FIN Scan, bei dem Flag auf FIN gesetzt wird, und Xmas Scan, bei dem NULL Scan, FIN, PSH und HUG gleichzeitig gesetzt werden. Da jede Kommunikation nicht normal ist, bleibt kein Protokoll übrig, das Ziel kann nur in einer UNIX / Linux-Umgebung verwendet werden und das Ergebnis von Öffnen / Filtern / Fehler ist unbekannt. FIN Scan NULL Scan Xmas Scan
Verwenden Sie nach dem Importieren des Socket-Moduls die Funktion connect (), geben Sie die IP- und Portnummer an und führen Sie die TCP-Kommunikation durch. Daten können mit den Funktionen send () und recv () gesendet und empfangen werden.
port_scanning.py
import socket
s = socket.socket()
s.connect(('IP Adresse',Port-Nummer))
s.close()
"Ergebnis" -Port_scanning.py
#Wenn der Port offen ist
>>
#Wenn der Port nicht geöffnet ist
Traceback (most recent call last):
File "C:/~", line 3, in <module>
s.connect(('127.0.0.1', 23))
ConnectionRefusedError: [WinError 10061]Es konnte keine Verbindung hergestellt werden, da dies vom Zielcomputer abgelehnt wurde.
Um den Fehler zu beheben, verwenden Sie die Anweisungen "try" und "Ausnahme" auf einfache Weise, um zwischen Erfolg und Misserfolg zu unterscheiden.
port_scanning.py
import socket
try:
s = socket.socket()
s.connect(('IP Adresse',Port-Nummer))
print('success')
s.close()
except:
print('fail')
"Ergebnis" -Port_scanning.py
#Wenn der Port offen ist
>> success
#Wenn der Port nicht geöffnet ist
>> fail
Erstellen, um die Portnummer innerhalb des Bereichs mithilfe der roop-Anweisung automatisch zu überprüfen.
port_scanning.py
import socket
for port in range(1,101):
try:
s = socket.socket()
s.connect(('IP Adresse', port))
print('Port öffnen:%d' % port)
s.close()
except: pass
"Ergebnis" -Port_scanning.py
>>Port öffnen:22
>>Port öffnen:80
Das Überprüfen der Ports 1 bis 100 kann zeitaufwändig sein. Verwenden Sie daher den Listendatentyp von Python, um nur die Ports zu scannen, die hauptsächlich verwendet werden.
** Häufig verwendete Ports ** 20, 21(FTP) / 22(SSH) / 23(Telnet) / 25(SMTP) / 53(DNS) / 80(HTTP) / 110(POP3) / 123(NTP) / 443(HTTPS) / 1433(MSSQL) / 3306(MYSQL) / 1521(ORACLE) / 8080(ORACLE, TOMCAT) / 3389(RDP)
port_scanning.py
import socket
ports = [20, 21, 22, 23, 25, 53, 80, 110, 123, 443, 1433, 3306, 1521, 8080, 3389]
for port in ports:
try:
s = socket.socket()
s.connect(('IP Adresse', port))
print('Port öffnen:%d' % port)
s.close()
except: pass
"Ergebnis" -Port_scanning.py
>>Port öffnen:80
>>Port öffnen:443
>>Port öffnen:3306
>>Port öffnen:8080
Verwenden Sie die Funktion input (), um die Hostadresse einzugeben und Code für die Portüberprüfung zu erstellen.
port_scanning.py
import socket
ports = [20, 21, 22, 23, 25, 53, 80, 110, 123, 443, 1433, 3306, 1521, 8080, 3389]
host = input('IP Adresse:')
for port in ports:
try:
s = socket.socket()
s.connect((host, port))
print('Port öffnen:%d' % port)
s.close()
except: pass
"Ergebnis" -Port_scanning.py
>>IP-Adresse: 127.0.0.1
>>Port öffnen:80
>>Port öffnen:443
>>Port öffnen:3306
>>Port öffnen:8080
Dieses Mal habe ich versucht, ein einfaches Port-Scan-Tool mit der Python-Sokect-Bibliothek zu erstellen, aber um es praktisch zu verwenden, sind verschiedene Modifikationen erforderlich. Da das Prinzip des Port-Scannens und das grundlegende Tool zum Port-Scannen mit Python erstellt werden können, hoffen die verantwortliche Person und der Administrator, auf diesen Beitrag zu verweisen und beim Aufbau einer sichereren Netzwerkumgebung zu helfen.
Recommended Posts