Dinesh-raya/python-network-port-scanner
GitHub: Dinesh-raya/python-network-port-scanner
专业的异步网络端口扫描器,快速发现开放端口和服务。
Stars: 0 | Forks: 0
# 端口扫描专家
一个使用 Python 构建的专业的异步网络端口扫描器。专为安全专家和网络管理员设计。
[](https://www.python.org/downloads/)
[](LICENSE)
[](https://docs.astral.sh/ruff/)
## 功能
- **异步 TCP/UDP 扫描** - 使用 Python 的 asyncio 进行高性能并发端口扫描
- **服务检测** - 自动识别常见服务(HTTP、SSH、FTP 等)
- **抓取服务标头** - 获取服务标头以进行版本识别
- **多种输出格式** - JSON、CSV、表格和纯文本输出
- **进度跟踪** - 使用 Rich 的实时进度条
- **灵活的端口指定** - 单个端口、范围或逗号分隔列表
- **并发控制** - 可配置的最大并发连接数
- **专业 CLI** - 直观的命令行界面,使用 Click
## 安装
### 从源码安装
```
git clone https://github.com/Dinesh-raya/python-network-port-scanner.git
cd python-network-port-scanner
pip install -e .
```
### 开发安装
```
pip install -e ".[dev]"
```
## 快速入门
### 基本扫描
```
# 扫描目标上的常见端口
port-scanner scan example.com
# 扫描特定端口
port-scanner scan example.com -p 80,443,8080
# 扫描端口范围
port-scanner scan example.com -p 1-1000
```
### 输出格式
```
# JSON 输出(非常适合脚本)
port-scanner scan example.com -f json
# CSV 输出(非常适合电子表格)
port-scanner scan example.com -f csv
# 将结果保存到文件
port-scanner scan example.com -f json -o results.json
```
### 高级选项
```
# 高速扫描,更高并发性
port-scanner scan example.com -p 1-10000 -c 500
# 详细输出
port-scanner scan example.com -v
# 禁用服务检测以加快扫描速度
port-scanner scan example.com --no-service-detection
```
## 作为库使用
```
import asyncio
from port_scanner import PortScanner, ScanConfig, ScanTarget, Port, Protocol
async def main():
# Define target
ports = [
Port(number=80, protocol=Protocol.TCP),
Port(number=443, protocol=Protocol.TCP),
Port(number=8080, protocol=Protocol.TCP),
]
target = ScanTarget(host="example.com", ip="93.184.216.34", ports=ports)
# Configure scan
config = ScanConfig(
target=target,
timeout_ms=1000,
max_concurrency=100,
detect_services=True,
grab_banners=True,
)
# Run scan
scanner = PortScanner(config)
results = await scanner.scan()
# Process results
for result in results:
print(f"Port {result.port.number}: {result.state.value}")
if result.service:
print(f" Service: {result.service}")
if result.banner:
print(f" Banner: {result.banner}")
asyncio.run(main())
```
## 架构
```
src/port_scanner/
├── __init__.py # Public API exports
├── __main__.py # python -m port_scanner entry
├── cli.py # Click CLI with Rich output
├── models.py # Data models (dataclasses)
├── scanner.py # Async scanning engine
├── output.py # Output formatters
├── services.py # Service name database
└── utils.py # Helpers (hostname resolution, etc.)
```
### 关键组件
| 组件 | 目的 |
|-----------|---------|
| `models.py` | 具有验证的不可变数据模型 |
| `scanner.py` | 具有并发控制的异步扫描引擎 |
| `output.py` | 可插拔的输出格式化器 |
| `cli.py` | 具有进度跟踪的专业 CLI |
| `services.py` | 服务名称数据库(47 个常见服务) |
## 输出示例
### 表格输出(默认)
```
┌───────┬──────────┬────────┬─────────────┬─────────────────┬───────────────┐
│ Port │ Protocol │ State │ Service │ Banner │ Response Time │
├───────┼──────────┼────────┼─────────────┼─────────────────┼───────────────┤
│ 80 │ tcp │ open │ http │ Apache/2.4.41 │ 15.5ms │
│ 443 │ tcp │ open │ https │ │ 12.3ms │
│ 8080 │ tcp │ closed │ │ │ 0.0ms │
└───────┴──────────┴────────┴─────────────┴─────────────────┴───────────────┘
```
### JSON 输出
```
{
"scan_metadata": {
"target": "example.com",
"ip": "93.184.216.34",
"timestamp": "2024-01-15T10:30:00Z",
"total_ports_scanned": 3,
"open_ports_count": 2
},
"results": [
{
"port": 80,
"protocol": "tcp",
"state": "open",
"service": "http",
"banner": "Apache/2.4.41",
"response_time_ms": 15.5
}
]
}
```
## 开发
### 运行测试
```
# 运行所有测试
pytest
# 运行带有覆盖率
pytest --cov=port_scanner
# 运行特定测试文件
pytest tests/test_scanner.py
```
### 代码质量
```
# 代码风格检查
ruff check src/ tests/
# 类型检查
mypy src/
# 格式化
ruff format src/ tests/
```
## 用例
- **网络管理** - 验证服务是否在预期的端口上运行
- **安全审计** - 识别开放端口和运行中的服务
- **开发** - 检查本地服务是否可访问
- **DevOps** - 验证防火墙规则和网络配置
- **教育** - 了解网络和 Python 中的异步编程
## 技术亮点
此项目展示了:
- **异步编程** - 使用 asyncio 进行高效的 I/O 绑定操作
- **类型安全** - 使用 mypy 严格模式的完整类型提示
- **清晰架构** - 使用清晰的模块边界分离关注点
- **不可变数据** - 使用冻结的数据类进行线程安全的状态管理
- **专业 CLI** - 使用 Click 和 Rich 的直观界面
- **全面测试** - 使用 pytest 和模拟的单元测试
- **现代 Python** - Python 3.10+ 特性(匹配语句、联合类型)
## 未来改进
计划在未来版本中进行的增强:
| 功能 | 描述 |
|---------|-------------|
| **CIDR 扫描** | 扫描整个子网(例如,`192.168.1.0/24`) |
| **顶级端口预设** | 预定义端口列表(`-p top100`,`-p common`) |
| **增强的标头抓取** | 深度服务指纹识别(SSH 版本、HTTP 标头) |
| **速率限制** | 控制扫描速度(`--rate 100`)以避免检测 |
| **IPv6 支持** | 扫描 IPv6 地址和范围 |
| **扫描比较** | 比较两个扫描以检测随时间的变化 |
| **导出格式** | 其他输出格式(HTML 报告、XML) |
| **隐身模式** | SYN 扫描和其他隐藏技术 |
欢迎贡献!请参阅 [CONTRIBUTING](CONTRIBUTING.md) 获取指南。
## 许可证
MIT 许可证 - 有关详细信息,请参阅 [LICENSE](LICENSE)。
## 作者
**Dinesh Raya** - [GitHub](https://github.com/Dinesh-raya)
标签:Click 框架, CSV 输出, DNS查询工具, JSON 输出, MIT 许可, Python, Python 3, Qt框架, Ruff 代码风格, 命令行界面, 安全专家, 安全规则引擎, 并发控制, 异步编程, 数据导出, 数据统计, 无后门, 服务检测, 服务识别, 正则表达式, 版本识别, 端口扫描, 端口扫描器, 系统管理员, 网络安全, 网络扫描工具, 脚本化, 计算机取证, 进度跟踪, 逆向工具, 隐私保护