Spaces:
Sleeping
Sleeping
| 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() | |