prathameshbodkhe29-ux/portscanner.py

GitHub: prathameshbodkhe29-ux/portscanner.py

一个基于 Python 多线程的 TCP 端口扫描器,支持 IPv4/IPv6,用于探测目标主机指定范围内端口的开放状态。

Stars: 0 | Forks: 0

# portscanner.py 这是一个基于 Python 的端口扫描器。它会扫描 1 到 1000 的端口,并显示其状态是开放还是关闭。 import socket import threading import queue import logging from datetime import datetime # ================================================== # 配置 # ================================================== MAX_THREADS = 100 DEFAULT_TIMEOUT = 1.0 # ================================================== # 日志设置 # ================================================== logging.basicConfig( filename="portscan.log", level=logging.INFO, format="%(asctime)s - %(message)s" ) # ================================================== # 共享资源 # ================================================== port_queue = queue.Queue() print_lock = threading.Lock() # ================================================== # 端口扫描函数 # ================================================== def scan_port(host, port, timeout): try: # 自动检测 IPv4 或 IPv6 addr_info = socket.getaddrinfo( host, port, socket.AF_UNSPEC, socket.SOCK_STREAM ) ``` family, socktype, proto, canonname, sockaddr = addr_info[0] sock = socket.socket(family, socktype, proto) sock.settimeout(timeout) result = sock.connect_ex(sockaddr) if result == 0: status = "OPEN" else: status = "CLOSED" sock.close() except socket.timeout: status = "TIMEOUT" except Exception as e: status = f"ERROR ({e})" with print_lock: print(f"Port {port:<6} : {status}") logging.info(f"{host}:{port} -> {status}") ``` # ================================================== # 工作线程 # ================================================== def worker(host, timeout): while not port_queue.empty(): try: port = port_queue.get_nowait() scan_port(host, port, timeout) port_queue.task_done() except queue.Empty: break # ================================================== # 扫描器函数 # ================================================== def start_scan(host, start_port, end_port, timeout): ``` for port in range(start_port, end_port + 1): port_queue.put(port) threads = [] for _ in range(min(MAX_THREADS, end_port - start_port + 1)): t = threading.Thread( target=worker, args=(host, timeout), daemon=True ) threads.append(t) t.start() for t in threads: t.join() ``` # ================================================== # 主程序 # ================================================== def main(): ``` print("=" * 50) print("Python IPv4 / IPv6 TCP Port Scanner") print("=" * 50) host = input("Enter Host/IP (IPv4 or IPv6): ").strip() try: start_port = int(input("Start Port: ")) end_port = int(input("End Port: ")) if start_port < 1 or end_port > 65535: raise ValueError except ValueError: print("Invalid port range.") return timeout_input = input( f"Timeout in seconds [{DEFAULT_TIMEOUT}]: " ).strip() timeout = DEFAULT_TIMEOUT if timeout_input: try: timeout = float(timeout_input) except ValueError: pass print("\nResolving host...") try: resolved = socket.getaddrinfo( host, None, socket.AF_UNSPEC, socket.SOCK_STREAM ) ip_version = "IPv6" if resolved[0][0] == socket.AF_INET6 else "IPv4" print(f"Target : {host}") print(f"Detected: {ip_version}") print(f"Ports : {start_port}-{end_port}") print(f"Started : {datetime.now()}") print("-" * 50) except Exception as e: print(f"Host resolution failed: {e}") return start_scan(host, start_port, end_port, timeout) print("-" * 50) print("Scan Complete.") print("Results logged to portscan.log") ``` if __name__ == "__main__": main()
标签:DNS查询工具, Python, 插件系统, 无后门, 端口扫描器, 网络工具, 逆向工具