File size: 1,419 Bytes
3bd669b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import gradio as gr
import socket

# Common ports to scan (you can expand this list if needed)
COMMON_PORTS = {
    21: "FTP",
    22: "SSH",
    23: "Telnet",
    25: "SMTP",
    53: "DNS",
    80: "HTTP",
    110: "POP3",
    143: "IMAP",
    443: "HTTPS",
    3306: "MySQL",
    3389: "RDP"
}

def scan_ports(host):
    result = f"πŸ” Scanning {host}...\n\n"
    open_ports = []

    try:
        ip = socket.gethostbyname(host)
    except socket.gaierror:
        return "❌ Error: Invalid host or domain."

    for port, service in COMMON_PORTS.items():
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(0.5)
            result_code = sock.connect_ex((ip, port))
            if result_code == 0:
                open_ports.append(f"βœ… Port {port} ({service}) is open")
            sock.close()
        except Exception as e:
            continue

    if open_ports:
        return result + "\n".join(open_ports)
    else:
        return result + "❌ No common ports are open."

iface = gr.Interface(
    fn=scan_ports,
    inputs=gr.Textbox(label="Enter Hostname or IP Address", placeholder="e.g. example.com or 8.8.8.8"),
    outputs=gr.Markdown(label="Port Scan Result"),
    title="πŸ”’ Port Scanner",
    description="Scans a given IP or domain for open common ports (e.g. HTTP, FTP, SSH, etc.)."
)

if __name__ == "__main__":
    iface.launch()