Individuare le porte aperte di un dato IP

Ecco come fare per individuare le porte aperte di uno specifico IP a vostra scelta!


import socket
import threading
import tkinter as tk
from tkinter import ttk, StringVar

def check_port(ip, port):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.settimeout(1)
        try:
            s.connect((ip, port))
            return True
        except (socket.timeout, socket.error):
            return False

def scan_ports():
    ip = ip_entry.get()
    open_ports = []
    progress_bar["value"] = 0
    root.update_idletasks()

    for port in range(1, 1025):
        if check_port(ip, port):
            print(f"Porta {port} aperta")
            open_ports.append(port)
        progress_bar["value"] = (port/1024)*100
        root.update_idletasks()

    result_text.set(f"Porte aperte su {ip}: {', '.join(map(str, open_ports))}")

def start_scan():
    scan_thread = threading.Thread(target=scan_ports)
    scan_thread.start()

# GUI Setup
root = tk.Tk()
root.title("Scanner di Porte")

frame = ttk.Frame(root, padding="10")
frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))

ip_label = ttk.Label(frame, text="Inserisci l'IP:")
ip_label.grid(row=0, column=0, sticky=tk.W, pady=5)

ip_entry = ttk.Entry(frame, width=20)
ip_entry.grid(row=0, column=1, pady=5)
ip_entry.insert(0, "127.0.0.1")

scan_button = ttk.Button(frame, text="Scansiona", command=start_scan)
scan_button.grid(row=1, column=0, columnspan=2, pady=5)

result_text = StringVar()
result_label = ttk.Label(frame, textvariable=result_text)
result_label.grid(row=2, column=0, columnspan=2, pady=5)

progress_bar = ttk.Progressbar(frame, orient=tk.HORIZONTAL, length=200, mode='determinate')
progress_bar.grid(row=3, column=0, columnspan=2, pady=10)

root.mainloop()