Mohxndaziz/TCP-Port-Scanner-using-python

GitHub: Mohxndaziz/TCP-Port-Scanner-using-python

基于 Python 多线程 Socket 的 TCP 端口扫描器,支持服务指纹识别、DNS 解析和 JSON 报告导出,旨在帮助开发者从零理解端口扫描的核心网络概念。

Stars: 0 | Forks: 0

## 从零开始构建 TCP 端口扫描器 ### 项目目标与动机 我正在构建一个名为 portscanner.py 的 Python CLI 工具,它可以扫描目标主机的开放 TCP 端口,通过 banner grabbing 识别服务指纹,处理 SSL/TLS 连接,并执行 DNS 解析。这将通过让我亲自实现核心网络概念,帮助我理解端口扫描器的内部工作原理。 ![Image](https://nextwork.ai/charmed_brown_innocent_seal/uploads/1f0af7da-6c38-4562-a4de-fe203f4d5e85_umvojfy6) ### 选择安全且合规的测试目标 测试目标是 scanme.nmap.org。它是安全的,因为它由 Nmap Project 专门设置和维护,用于测试端口扫描器并了解其工作原理。 ## 使用多线程 Socket 扫描端口 ### 设计核心扫描引擎 在这一步中,我正在构建 TCP connect scan 功能,通过尝试与目标主机上的每个端口建立完整连接来测试单个端口,以便了解哪些端口是开放的,哪些是关闭或被过滤的。 ### connect_ex() 如何驱动端口检测 connect_ex() 返回 0 表示成功(开放),返回非 0 表示失败(关闭)。 ## 通过 Banner Grabbing 和 SSL 识别服务指纹 ### 添加服务检测功能 在这一步中,我将添加一个 banner grabber 和 SSL/TLS 支持,以识别加密服务的指纹,并使用正则表达式模式匹配提取服务版本。 ### 实时服务检测结果 我检测到服务为 "SSH",版本为 OpenSSH_6.6.1p1 ## DNS 解析与完善的 CLI 界面 ### 构建命令行界面 在这一步中,我将为目标侦察添加正向和反向 DNS 解析,并使用 argparse 构建灵活的 CLI,以便用户可以从终端配置扫描,同时创建一个看起来专业的格式化结果表。 ### DNS 解析如何处理主机名和 IP 当它接收到一个主机名时,它会尝试使用 socket.gethostbyname(target) 将此域名解析为 IP 地址(正向 DNS 查询)。 错误处理:如果查询失败(例如,由于主机名拼写错误或没有互联网访问,这会引发 socket.gaierror),它会打印清晰的错误消息,并使用 raise SystemExit(1) 立即终止程序。当它接收到一个 IP 时,它会尝试使用 socket.gethostbyaddr(target) 执行反向 DNS 查询以找到相应的域名。如果查询成功,它会提取主域名并将其保存到 hostname 变量中。如果查询失败(例如,如果该 IP 在 DNS 服务器上没有反向指针记录,从而引发 socket.herror),它会捕获该错误并将 hostname 置为 None。 ## 导出结构化的 JSON 扫描报告 ![Image](https://nextwork.ai/charmed_brown_innocent_seal/uploads/1f0af7da-6c38-4562-a4de-fe203f4d5e85_em2stmy5) ### 设计机器可读的安全输出 在这个项目扩展中,scan_metadata 包含了有关扫描配置的所有信息:target、IP、hostname、port count、thread count、timeout、timestamp 和 duration。results 列表已经是一个字典列表(来自 identify_service()),因此它可以直接序列化为 JSON。结构化输出非常有用,因为您可以将 JSON 报告加载到 Python 脚本、Web 仪表板或 SIEM 工具中,而无需编写自定义解析器。纯文本报告需要人工阅读或使用脆弱的正则表达式解析。 ## 完整扫描流程图: 解析 CLI → 解析 hostname → 扫描端口 → 抓取 banner → 检测服务 → 打印结果 → 导出 JSON ``` port_scanner/ ├── scanner/ │ ├── __init__.py │ ├── models.py │ ├── constants.py │ ├── resolver.py │ ├── port_scan.py │ ├── service_detect.py │ ├── cli.py │ └── report.py ├── main.py ├── requirements.txt └── README.md ```
标签:Python, Scrypt密钥派生, 插件系统, 数据统计, 无后门, 服务指纹识别, 端口扫描, 网络扫描器, 逆向工具