LJones910109/python-port-scanner
GitHub: LJones910109/python-port-scanner
一个基于 Python 多线程实现的 TCP 端口扫描器,提供端口扫描、服务检测和报告生成功能,适合网络安全学习与技能展示。
Stars: 0 | Forks: 0
# 🔍 高级端口扫描器
**作者:** Lillian Jones
**工具:** Python 3, socket, threading, argparse
**分类:** 网络侦察 | 网络安全作品集
## 概述
这是一个用 Python 构建的功能齐全的 TCP 端口扫描器,模拟了 Nmap 的核心功能。旨在展示对网络 socket、多线程、服务检测和 banner grabbing 的理解——这些都是 SOC Analyst 和 IT 岗位的关键技能。
## 功能
|功能 |描述 |
|---------------------------|---------------------------------------------------------|
|**多线程扫描**|多达 100 个并发线程,实现快速扫描 |
|**Banner Grabbing** |从开放端口获取服务版本信息 |
|**服务检测** |将端口号映射到服务名(SSH、HTTP、SMB 等)|
|**灵活的端口选择**|`common`、`all`、范围 (`1-1024`) 或自定义列表 |
|**双重输出** |彩色终端显示 + 纯文本报告文件 |
|**两种运行模式** |CLI 标志或交互式菜单 |
## 使用的技术
- `socket` — TCP 连接和 banner grabbing
- `threading` + `queue.Queue` — 并发端口扫描
- `argparse` — 命令行参数解析
- `datetime` — 带时间戳的报告
- `re` — 去除 ANSI 颜色以实现干净的文件输出
## 用法
### CLI 模式
```
# 扫描常见端口(默认)
python3 port_scanner.py 192.168.1.1
# 扫描端口 1–1024
python3 port_scanner.py 192.168.1.1 -p 1-1024
# 扫描特定端口
python3 port_scanner.py 192.168.1.1 -p 22,80,443,3306
# 使用 200 个线程进行完整扫描,不保存文件
python3 port_scanner.py 192.168.1.1 -p all -t 200 --no-save
```
### 交互式菜单模式
```
python3 port_scanner.py --menu
```
## 示例输出
```
=======================================================
Target : 172.16.148.133 (172.16.148.133)
Ports : 100 to scan
Threads : 100
Started : 2026-06-17 14:32:10
=======================================================
[*] Scanning... please wait
=================================================================
ADVANCED PORT SCANNER - SCAN REPORT
=================================================================
Target Host : 172.16.148.133
Resolved IP : 172.16.148.133
Hostname : metasploitable
Scan Date : 2026-06-17 14:32:10
Ports Scanned : 100
Scan Duration : 3.21 seconds
Open Ports : 8
PORT SERVICE BANNER
------- --------------- --------------------------------------
21 FTP 220 (vsFTPd 2.3.4)
22 SSH SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1
80 HTTP HTTP/1.1 200 OK | Server: Apache/2.2.8
139 NetBIOS No banner
445 SMB No banner
3306 MySQL 5.0.51a-3ubuntu5
5432 PostgreSQL No banner
6667 IRC :irc.Metasploitable.LAN NOTICE ...
=================================================================
SCAN COMPLETE
=================================================================
[+] Report saved to: scan_172_16_148_133_20260617_143213.txt
```
## 实验环境
|设备 |IP |操作系统 |
|------------------------|--------------|------------|
|Kali Linux(攻击者) |172.16.148.132|Kali Rolling|
|Metasploitable2(目标)|172.16.148.133|Ubuntu 8.04 |
## 展示的技能
- TCP socket 编程
- 多线程应用程序设计
- 网络服务枚举
- Banner grabbing / 版本检测
- 使用 argparse 开发 CLI 工具
- 报告生成和文件 I/O
## 相关作品集项目
- [Nmap 扫描实验](../nmap-scanning-lab)
- [Metasploit 漏洞利用实验](../metasploit-exploitation-lab)
- [Wireshark ARP/MITM 检测实验](../wireshark-arp-mitm-lab)
- [Splunk SIEM 分析实验](../splunk-siem-lab)
标签:Banner抓取, Python, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 隐私保护