89 lines
3.0 KiB
Python
Executable File
89 lines
3.0 KiB
Python
Executable File
import socket
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
def get_local_ip():
|
|
"""
|
|
Ermittelt die lokale IP-Adresse des Geräts.
|
|
|
|
:return: Lokale IP-Adresse als String
|
|
"""
|
|
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
|
s.connect(("8.8.8.8", 80)) # Verbindung zu einem öffentlichen DNS-Server herstellen
|
|
return s.getsockname()[0]
|
|
|
|
def get_ip_from_hostname(hostname):
|
|
"""
|
|
Ermittelt die IP-Adresse für einen gegebenen Hostnamen (z.B. eine Website).
|
|
|
|
:param hostname: Hostname oder URL
|
|
:return: IP-Adresse als String
|
|
"""
|
|
return socket.gethostbyname(hostname)
|
|
|
|
def scan_port(ip, port):
|
|
"""
|
|
Überprüft, ob ein bestimmter Port an einer bestimmten IP-Adresse geöffnet ist.
|
|
|
|
:param ip: IP-Adresse des Hosts
|
|
:param port: Portnummer, die gescannt werden soll
|
|
:return: Tuple (port, status), wobei status True ist, wenn der Port geöffnet ist, andernfalls False
|
|
"""
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
|
sock.settimeout(1) # Timeout auf 1 Sekunde setzen
|
|
result = sock.connect_ex((ip, port))
|
|
if result == 0:
|
|
return port, True
|
|
else:
|
|
return port, False
|
|
|
|
def scan_ports(ip, start_port, end_port, max_workers=100):
|
|
"""
|
|
Scannt eine Reihe von Ports an einer bestimmten IP-Adresse.
|
|
|
|
:param ip: IP-Adresse des Hosts
|
|
:param start_port: Erster Port, der gescannt werden soll
|
|
:param end_port: Letzter Port, der gescannt werden soll
|
|
:param max_workers: Maximale Anzahl gleichzeitiger Threads
|
|
:return: Liste von offenen Ports
|
|
"""
|
|
open_ports = []
|
|
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
|
futures = [executor.submit(scan_port, ip, port) for port in range(start_port, end_port + 1)]
|
|
for future in futures:
|
|
port, is_open = future.result()
|
|
if is_open:
|
|
open_ports.append(port)
|
|
return open_ports
|
|
|
|
def main():
|
|
# Lokale IP-Adresse ermitteln und anzeigen
|
|
local_ip = get_local_ip()
|
|
print(f"Ihre lokale IP-Adresse ist: {local_ip}")
|
|
|
|
# Benutzer nach der zu scannenden Website fragen
|
|
website = input("Bitte geben Sie die Website (ohne 'http://' oder 'https://') ein, die gescannt werden soll: ")
|
|
|
|
# IP-Adresse der Website ermitteln
|
|
try:
|
|
target_ip = get_ip_from_hostname(website)
|
|
print(f"Die IP-Adresse von {website} ist: {target_ip}")
|
|
except socket.gaierror:
|
|
print("Ungültiger Hostname. Bitte überprüfen Sie die Website-Adresse.")
|
|
return
|
|
|
|
# Bereich der Ports, die gescannt werden sollen
|
|
start_port = 1
|
|
end_port = 1024
|
|
|
|
print(f"Scanning ports {start_port}-{end_port} on {target_ip}...")
|
|
open_ports = scan_ports(target_ip, start_port, end_port)
|
|
if open_ports:
|
|
print("Open ports found:")
|
|
for port in open_ports:
|
|
print(f"Port {port} is open")
|
|
else:
|
|
print("No open ports found")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|