PhanDat1996/tcp-port-checker

GitHub: PhanDat1996/tcp-port-checker

一款零依赖的快速多线程 TCP 端口扫描器,支持多主机批量扫描、banner 抓取与结果导出。

Stars: 0 | Forks: 0

# tcp-port-checker 一个快速、多线程的 TCP 端口扫描器,使用纯 Python 编写 —— 无任何外部依赖。 扫描一个或多个主机的单个端口、逗号分隔列表或范围。报告端口的 open/closed/timeout 状态及延迟,可选的 banner grabbing,并支持导出为 CSV/JSON。 ## 功能 - **多主机、多端口** —— 在单条命令中扫描多个目标 - **灵活的端口语法** —— `22,80,443`、`1-1024` 或组合的 `22,80,8000-9000` - **多线程** —— 默认 100 个并行连接(可通过 `-w` 配置) - **Banner grabbing** —— 从开放端口读取前 1024 字节(`--banner`) - **导出** —— CSV 和/或 JSON 输出 - **零依赖** —— 仅需 Python 3.8+ 标准库 ## 要求 - Python 3.8+ - 无需 `pip install` ## 用法 ``` python tcp_port_checker.py -H -p [options] ``` ### 选项 | 标志 | 描述 | 默认值 | |---|---|---| | `-H`, `--hosts` | 逗号分隔的主机名或 IP | 必填 | | `-p`, `--ports` | 端口列表或范围 | 必填 | | `-t`, `--timeout SEC` | 连接超时时间(秒) | `3` | | `-w`, `--workers N` | 并行线程数 | `100` | | `--open-only` | 仅打印 OPEN 状态的端口 | 关 | | `--banner` | 尝试在开放端口上获取 service banner | 关 | | `--csv FILE` | 将结果导出为 CSV | — | | `--json FILE` | 将结果导出为 JSON | — | ## 示例 ### 检查单个主机上的常见端口 ``` python tcp_port_checker.py -H 192.168.1.1 -p 22,80,443,8080 ``` ``` [OPEN ] 192.168.1.1:22 latency=1.23 ms [OPEN ] 192.168.1.1:80 latency=0.98 ms [CLOSED ] 192.168.1.1:443 error=Connection refused [TIMEOUT ] 192.168.1.1:8080 error=Connection timed out === Summary === Total : 4 Open : 2 Closed : 1 Timeout : 1 ``` ### 扫描端口范围,仅显示开放端口 ``` python tcp_port_checker.py -H 10.0.1.50 -p 1-1024 --open-only ``` ### 同时扫描多个主机 ``` python tcp_port_checker.py -H 10.0.1.10,10.0.1.20,10.0.1.30 -p 22,80,443 ``` ### 获取 banner 并导出为 JSON ``` python tcp_port_checker.py -H db01.internal -p 3306,5432,6379 --banner --json result.json ``` ``` [ { "host": "db01.internal", "port": 5432, "status": "OPEN", "latency_ms": 2.41, "banner": "", "error": "" } ] ``` ### 使用短超时进行快速全范围扫描 ``` python tcp_port_checker.py -H target.host -p 1-65535 -t 1 -w 500 --open-only ``` ### 导出为 CSV 以用于报告 ``` python tcp_port_checker.py -H 192.168.1.1 -p 22,80,443,3306,5432 --csv scan.csv ``` CSV 输出格式: ``` host,port,status,latency_ms,banner,error 192.168.1.1,22,OPEN,1.23,SSH-2.0-OpenSSH_8.9p1, 192.168.1.1,80,OPEN,0.98,, 192.168.1.1,443,CLOSED,,,Connection refused ``` ## 状态值 | 状态 | 含义 | |---|---| | `OPEN` | TCP 连接成功建立 | | `CLOSED` | 连接被拒绝 —— 该端口上没有程序监听 | | `TIMEOUT` | 在超时时间窗口内未响应 | | `DNS_ERROR` | 无法解析主机名 | | `ERROR` | 其他操作系统级别的 socket 错误 | ## 注意事项 - 在进行大范围扫描(`1-65535`)时,请使用 `--open-only` 以避免输出信息过于杂乱 - `--banner` 会在每个开放端口上增加 1.5 秒的读取等待时间 —— 请配合较小的端口列表使用 - 在大范围扫描时使用较高的 `--workers` 可能会触发 IDS 警报 —— 请负责任地使用 - 仅扫描 TCP —— 不支持 UDP - 仅扫描您拥有或具有明确测试权限的系统 ## 许可证 MIT
标签:Banner抓取, JSON导出, Python, TCP扫描, TCP端口, 实时处理, 密码管理, 开源, 插件系统, 数据统计, 无后门, 服务器安全, 标准库, 端口扫描, 纯Python开发, 网络安全, 网络扫描器, 轻量级工具, 逆向工具, 隐私保护, 零依赖