Quellcode hier klicken
Dies ist ein grundlegendes Port-Scanner-Tool, mit dem Benutzer den Host scannen können, um offene Ports zu finden und herauszufinden, welcher Dienst auf dem Port ausgeführt wird...
Schauen wir uns zunächst den Code an und zerlegen ihn dann in Teile, um ihn zu analysieren...
import socket from datetime import datetime import sys import os def usage(): """Prints the usage information for this script.""" usage_info = """ Tool Name: SimplePortScanner Developed by : Bharath Kumar Usage: python3 port_scanner.py [options] Options: -h, --help Show this help message and exit. -t, --target <ip> Specify the target hostname or IP address (required). -p, --port <port> Specify a port (or) range of ports to scan (e.g. -p 80 (or) -p 1-1024). Description: This script performs a port scan on a specified hostname or IP address for a specific port or a range of ports, checking which ports are open. Examples: python3 port_scanner.py -t example.com (or) 192.0.0.1 python3 port_scanner.py -t example.com (or) 192.168.1.1 -p 80 python3 port_scanner.py -t example.com (or) 192.168.1.1 --ports 1-1024 """ print(usage_info) start_time = datetime.now() def scan_port(ip, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(1) try: result = s.connect_ex((ip, port)) service = socket.getservbyport(int(port)) except: service = "None" if result == 0: print(" Port: {}\t State: Open\t Service: {}".format(port, service)) else: pass s.close() def host(target): try: ip = socket.gethostbyname(target) print('_'*51) print("[#] Resolved {} to {}".format(target,ip)) return ip except: print('_'*51) print("[#] Error: Unable to resolve hostname {}".format(target)) sys.exit(1) def check_host_up(ip): ping = os.system("ping {} -c 1 > /dev/null".format(ip)) if ping == 0: print("[#] {} host is up and running".format(ip)) return True else: print("[#] {} host is down".format(ip)) print("Exiting...") exit() return False if __name__ == "__main__": target_ip = None start_port = 1 end_port = 65535 try: for i, arg in enumerate(sys.argv): if arg in ("-t", "--target"): target_ip = sys.argv[i + 1] elif arg in ("-p", "--ports"): port_range = sys.argv[i + 1] if "-" in port_range: start_port, end_port = map(int, port_range.split('-')) else: start_port = end_port = int(port_range) if target_ip is None: print("[#] Error: Target hostname or IP address is required.") usage() sys.exit(1) if start_port is None or end_port is None: print("[#] Error: Port range is required.") usage() sys.exit(1) target_ip = host(target_ip) if not check_host_up(target_ip): sys.exit(1) print(f"[#] Scanning {target_ip} from port {start_port} to {end_port}...") print("[#] Scanning started at: {}".format(start_time)) print('_'*51) for port in range(start_port, end_port + 1): scan_port(target_ip, port) except (IndexError, ValueError): print("[#] Error: Invalid arguments provided.") usage() sys.exit(1) start_time = start_time.now() - start_time print('_'*51) print("Scanning is completed in ",start_time) </port></ip>
Socket importieren: Eine Möglichkeit, zwei Knoten (Server, Client) miteinander zu kommunizieren.
from datetime import datetime: Wird für das Scannen aufgewendete Rechenzeit verwendet.
System importieren: ist Zugriff auf systemspezifische Parameter (argv).
Betriebssystem importieren: wird zum Ausführen des Befehls Ping verwendet.
def_usage(): Druckt die Nutzungsinformationen für dieses Skript.
start_time = datetime.now(): wird verwendet, um die aktuelle Uhrzeit und das aktuelle Datum abzurufen, um die für das Scannen aufgewendete Zeit zu berechnen.
def scan_port(ip, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(1) try: result = s.connect_ex((ip, port)) service = socket.getservbyport(int(port)) except: service = "None" if result == 0: print(" Port: {}\t State: Open\t Service: {}".format(port, service)) else: pass s.close()
Dieser Codeblock definiert die Funktion scan_port(ip, port), die prüft, ob ein bestimmter Port an einer bestimmten IP-Adresse über Socket geöffnet ist.
Socket-Erstellung: socket.socket(socket.AF_INET, socket.SOCK_STREAM) Erstellen Sie einen neuen Socket für IPv4 mit TCP.
Timeout: s.settimeout(1) setzt die Socket-Zeit auf 1 Sekunde. Wenn die Verbindung innerhalb dieser Zeit nicht erfolgreich ist, wird der Versuch abgebrochen.
Verbindungstest:s.connect_ex((ip, port))versucht, die spezifische IP und den Port zu verbinden. wenn es erfolgreich ist, ist das Ergebnis 0; andernfalls wird es ein anderer Wert sein.
Diensterkennung: socket.getservbyport(int(port))versuchen, Dienste zu erkennen, die auf dem angegebenen Port ausgeführt werden, z. B. HTTP für Port 80.
Fehlerbehandlung:Im Falle eines Fehlers (z. B. kein Dienst auf dem Port), setzt der Except-Block den Dienst auf „Keine“.
Ausgabe: Wenn der Port geöffnet ist (Ergebnis == 0), werden die Portnummer, der Status („Offen“) und der Dienstname gedruckt.
Verbindungsschluss: s.close() schließt den Socket, um Ressourcen freizugeben.
def host(target): try: ip = socket.gethostbyname(target) print('_'*51) print("[#] Resolved {} to {}".format(target,ip)) return ip except: print('_'*51) print("[#] Error: Unable to resolve hostname {}".format(target)) sys.exit(1)
Dieser Codeblock definiert die Funktion host(target), die ein bestimmtes Ziel (einen Hostnamen) mithilfe von socket.gethostname() in seine entsprechende IP-Adresse auflöst
def check_host_up(ip): ping = os.system("ping {} -c 1 > /dev/null".format(ip)) if ping == 0: print("[#] {} host is up and running".format(ip)) return True else: print("[#] {} host is down".format(ip)) print("Exiting...") exit() return False
Diese Funktion check_host_up(ip) prüft mithilfe der Ping-Methode os.system(), ob ein bestimmter Port auf einer bestimmten Ziel-IP aktiv oder inaktiv ist.
if __name__ == "__main__": target_ip = None start_port = 1 end_port = 65535 try: for i, arg in enumerate(sys.argv): if arg in ("-t", "--target"): target_ip = sys.argv[i + 1] elif arg in ("-p", "--ports"): port_range = sys.argv[i + 1] if "-" in port_range: start_port, end_port = map(int, port_range.split('-')) else: start_port = end_port = int(port_range)
Parsen von Befehlszeilenargumenten
Das Array sys.argv enthält die Liste der an das Skript übergebenen Argumente. Wir durchlaufen diese Argumente, um nach der Ziel-IP (-t oder --target) und dem Portbereich (-p oder --ports) zu suchen.
Die Ziel-IP/der Ziel-Hostname wird in target_ip gespeichert.
Der Portbereich wird analysiert und in start_port und end_port aufgeteilt. Wenn kein Bereich angegeben ist, werden standardmäßig alle Ports von 1 bis 65535 gescannt.
import socket from datetime import datetime import sys import os def usage(): """Prints the usage information for this script.""" usage_info = """ Tool Name: SimplePortScanner Developed by : Bharath Kumar Usage: python3 port_scanner.py [options] Options: -h, --help Show this help message and exit. -t, --target <ip> Specify the target hostname or IP address (required). -p, --port <port> Specify a port (or) range of ports to scan (e.g. -p 80 (or) -p 1-1024). Description: This script performs a port scan on a specified hostname or IP address for a specific port or a range of ports, checking which ports are open. Examples: python3 port_scanner.py -t example.com (or) 192.0.0.1 python3 port_scanner.py -t example.com (or) 192.168.1.1 -p 80 python3 port_scanner.py -t example.com (or) 192.168.1.1 --ports 1-1024 """ print(usage_info) start_time = datetime.now() def scan_port(ip, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(1) try: result = s.connect_ex((ip, port)) service = socket.getservbyport(int(port)) except: service = "None" if result == 0: print(" Port: {}\t State: Open\t Service: {}".format(port, service)) else: pass s.close() def host(target): try: ip = socket.gethostbyname(target) print('_'*51) print("[#] Resolved {} to {}".format(target,ip)) return ip except: print('_'*51) print("[#] Error: Unable to resolve hostname {}".format(target)) sys.exit(1) def check_host_up(ip): ping = os.system("ping {} -c 1 > /dev/null".format(ip)) if ping == 0: print("[#] {} host is up and running".format(ip)) return True else: print("[#] {} host is down".format(ip)) print("Exiting...") exit() return False if __name__ == "__main__": target_ip = None start_port = 1 end_port = 65535 try: for i, arg in enumerate(sys.argv): if arg in ("-t", "--target"): target_ip = sys.argv[i + 1] elif arg in ("-p", "--ports"): port_range = sys.argv[i + 1] if "-" in port_range: start_port, end_port = map(int, port_range.split('-')) else: start_port = end_port = int(port_range) if target_ip is None: print("[#] Error: Target hostname or IP address is required.") usage() sys.exit(1) if start_port is None or end_port is None: print("[#] Error: Port range is required.") usage() sys.exit(1) target_ip = host(target_ip) if not check_host_up(target_ip): sys.exit(1) print(f"[#] Scanning {target_ip} from port {start_port} to {end_port}...") print("[#] Scanning started at: {}".format(start_time)) print('_'*51) for port in range(start_port, end_port + 1): scan_port(target_ip, port) except (IndexError, ValueError): print("[#] Error: Invalid arguments provided.") usage() sys.exit(1) start_time = start_time.now() - start_time print('_'*51) print("Scanning is completed in ",start_time) </port></ip>
Hostauflösung und Erreichbarkeit
Sobald wir eine gültige IP-Adresse haben, müssen wir prüfen, ob der Host erreichbar ist. Die Funktion host(target_ip) löst einen Hostnamen in seine IP-Adresse auf und check_host_up(target_ip) überprüft, ob der Host online ist.
def scan_port(ip, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(1) try: result = s.connect_ex((ip, port)) service = socket.getservbyport(int(port)) except: service = "None" if result == 0: print(" Port: {}\t State: Open\t Service: {}".format(port, service)) else: pass s.close()
Port-Scanning
Der Kern der Port-Scan-Funktionalität findet innerhalb der Schleife statt:
Diese Schleife durchläuft den angegebenen Portbereich und für jeden Port prüft die Funktion scan_port(target_ip, port) den Port, um zu prüfen, ob er offen oder geschlossen ist.
Abschluss
Durch Befolgen dieser Anleitung haben Sie gelernt, wie Sie einen einfachen Python-Port-Scanner erstellen, der Befehlszeilenargumente akzeptiert, Eingaben validiert und eine Reihe von Ports auf einem bestimmten Ziel scannt. Obwohl es sich hierbei um eine grundlegende Implementierung handelt, bildet sie die Grundlage für erweiterte Funktionen wie Threading oder Diensterkennung.
Sie können dieses Skript gerne an Ihre spezifischen Bedürfnisse anpassen und erweitern. Viel Spaß beim Scannen!
Das obige ist der detaillierte Inhalt vonEinfacher Port-Scanner mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Es gibt viele Methoden, um zwei Listen in Python zu verbinden: 1. Verwenden Sie Operatoren, die in großen Listen einfach, aber ineffizient sind; 2. Verwenden Sie die Erweiterungsmethode, die effizient ist, die ursprüngliche Liste jedoch ändert. 3.. Verwenden Sie den operator =, der sowohl effizient als auch lesbar ist; 4. Verwenden Sie die Funktion iterertools.chain, die Speichereffizient ist, aber zusätzlichen Import erfordert. 5. Verwenden Sie List Parsing, die elegant ist, aber zu komplex sein kann. Die Auswahlmethode sollte auf dem Codekontext und den Anforderungen basieren.

Es gibt viele Möglichkeiten, Python -Listen zusammenzuführen: 1. Verwenden von Operatoren, die einfach, aber nicht für große Listen effizient sind; 2. Verwenden Sie die Erweiterungsmethode, die effizient ist, die ursprüngliche Liste jedoch ändert. 3. Verwenden Sie iTertools.chain, das für große Datensätze geeignet ist. 4. Verwenden Sie * Operator, fusionieren Sie kleine bis mittelgroße Listen in einer Codezeile. 5. Verwenden Sie Numpy.concatenate, das für große Datensätze und Szenarien mit hohen Leistungsanforderungen geeignet ist. 6. Verwenden Sie die Append -Methode, die für kleine Listen geeignet ist, aber ineffizient ist. Bei der Auswahl einer Methode müssen Sie die Listengröße und die Anwendungsszenarien berücksichtigen.

CompiledLanguageOfferSpeedandSecurity, während interpretedLanguagesProvideaseofuseAnDportabilität.1) kompiledlanguageslikec areFasterandSecurebuthavelongerDevelopmentCyclesandplatformDependency.2) InterpretedLanguages -pythonareaToReAndoreAndorePortab

In Python wird eine für die Schleife verwendet, um iterable Objekte zu durchqueren, und eine WHHE -Schleife wird verwendet, um Operationen wiederholt durchzuführen, wenn die Bedingung erfüllt ist. 1) Beispiel für Schleifen: Überqueren Sie die Liste und drucken Sie die Elemente. 2) Während des Schleifens Beispiel: Erraten Sie das Zahlenspiel, bis Sie es richtig erraten. Mastering -Zyklusprinzipien und Optimierungstechniken können die Code -Effizienz und -zuverlässigkeit verbessern.

Um eine Liste in eine Zeichenfolge zu verkettet, ist die Verwendung der join () -Methode in Python die beste Wahl. 1) Verwenden Sie die monjoy () -Methode, um die Listelemente in eine Zeichenfolge wie "" .Join (my_list) zu verkettet. 2) Für eine Liste, die Zahlen enthält, konvertieren Sie die Karte (STR, Zahlen) in eine Zeichenfolge, bevor Sie verkettet werden. 3) Sie können Generatorausdrücke für komplexe Formatierung verwenden, wie z. 4) Verwenden Sie bei der Verarbeitung von Mischdatentypen MAP (STR, MIXED_LIST), um sicherzustellen, dass alle Elemente in Zeichenfolgen konvertiert werden können. 5) Verwenden Sie für große Listen '' .Join (large_li

Pythonusesahybridapproach, kombinierte CompilationTobyteCodeAnDinterpretation.1) codiscompiledtoplatform-unintenpendentBytecode.2) BytecodeIsinterpretedBythepythonvirtualMachine, EnhancingEfficiency und Portablabilität.

Die Keedifferzences -zwischen Pythons "für" und "während" Loopsare: 1) "für" LoopsareideAlForiteratingOvercesorknownowniterations, während 2) "LoopsarebetterForContiningUtilAconditionismethoutnredefineditInations.un

In Python können Sie Listen anschließen und doppelte Elemente mit einer Vielzahl von Methoden verwalten: 1) Verwenden von Operatoren oder erweitert (), um alle doppelten Elemente beizubehalten; 2) Konvertieren in Sets und kehren Sie dann zu Listen zurück, um alle doppelten Elemente zu entfernen. Die ursprüngliche Bestellung geht jedoch verloren. 3) Verwenden Sie Schleifen oder listen Sie Verständnisse auf, um Sätze zu kombinieren, um doppelte Elemente zu entfernen und die ursprüngliche Reihenfolge zu verwalten.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Dreamweaver CS6
Visuelle Webentwicklungstools
