parth0xu/Port-Scanner

GitHub: parth0xu/Port-Scanner

一个使用 Python 编写的全范围 TCP 端口扫描器,能够扫描目标 IP 的全部 65,535 个端口并识别开放服务名称。

Stars: 1 | Forks: 0

# Port-EX — 全范围 TCP 端口扫描器 ## 功能介绍 - 扫描指定 IP 地址的所有 65,535 个 TCP 端口 - 识别开放端口并解析服务名称(HTTP、SSH、FTP 等) - 通过 `pyfiglet` 显示简洁的终端横幅 - 可配置的超时时间,以平衡速度与准确性 ## 演示 ``` ____ _ _____ __ | _ \ ___ _ __| |_ | ____|/ _| | |_) / _ \| '__| __| | _| |_ | __/ (_) | | | |_ | |___| _| |_| \___/|_| \__| |_____|_| Scanning 192.168.1.1 for open ports... [+] Port 22 is open (ssh) [+] Port 80 is open (http) [+] Port 443 is open (https) [+] Port 3306 is open (mysql) ``` ## 安装说明 ``` git clone https://github.com/parth0xu/Port-Scanner cd Port-Scanner pip install pyfiglet ``` ## 使用方法 ``` python3 port.py # 在提示时输入目标 IP:192.168.1.1 ``` ## 工作原理 该扫描器使用 Python 的 `socket` 库尝试在每个端口上建立 TCP 连接(`connect_ex`)。返回值为 `0` 表示该端口接受了连接——即处于开放状态。`socket.getservbyport()` 调用会从系统的 `/etc/services` 数据库中将端口号映射为已知的服务名称。 ``` result = s.connect_ex((target, port)) if result == 0: service = socket.getservbyport(port) print(f"[+] Port {port} is open ({service})") ``` **为什么使用 `connect_ex` 而不是 `connect`?** `connect()` 在失败时会引发异常。`connect_ex()` 则会返回错误代码——这使得在遍历数千个端口时更加简洁,无需为每个关闭的端口增加 try/except 开销。 ## 局限性与改进计划 - 目前为单线程——扫描所有 65,535 个端口速度较慢(约 30 分钟以上)。下一个版本将使用 `concurrent.futures.ThreadPoolExecutor` 进行并行扫描。 - 仅支持 TCP connect 扫描——不支持 SYN(半开)扫描,因为后者需要使用原始 socket 和 root 权限。 - 暂不支持 banner grabbing——未来版本将尝试读取服务 banner 以进行版本检测。 ## 展示技能 `Python` `Socket Programming` `Network Scanning` `TCP/IP` `Service Enumeration`
标签:Python, Socket编程, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护