Skip to content

AD-code-stack/Scamper_prob

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scamper追踪路由数据收集器

自动化网络测量系统,用于批量执行追踪路由操作并生成结构化CSV数据。

License: MIT Python 3.7+

📋 目录


功能特性

  • 批量处理 - 自动处理多个目标IP
  • 健壮的错误处理 - 单个失败不影响整体
  • 结构化输出 - CSV格式,包含逐跳详情
  • 全面的日志记录 - 跟踪错误、成功和统计信息
  • 全中文注释 - 代码和文档完全中文化
  • 自动源IP选择 - scamper自动选择最佳源IP

系统要求

⚠️ 重要提示

本程序只能在Linux系统上运行

  • scamper工具仅支持Linux
  • 需要root权限执行网络探测
  • Windows用户请使用WSL
  • macOS用户请使用Docker或虚拟机

依赖

  • 操作系统: Linux (Ubuntu/Debian/CentOS等)
  • Python: 3.7+
  • scamper: 网络测量工具
  • 权限: root/sudo权限

快速开始

Linux用户

# 1. 安装scamper
sudo apt-get update
sudo apt-get install scamper

# 2. 克隆项目
git clone https://github.com/your-username/scamper_traceroute_collector.git
cd scamper_traceroute_collector

# 3. 准备目标IP文件
cat > targets.csv << EOF
8.8.8.8
1.1.1.1
114.114.114.114
EOF

# 4. 运行程序(需要root权限)
sudo python3 main.py --targets targets.csv --output results.csv

# 5. 查看结果
cat results.csv

Windows用户(使用WSL)

# 1. 安装WSL(以管理员身份运行PowerShell)
wsl --install

# 2. 重启电脑,打开Ubuntu应用

# 3. 在WSL中安装依赖
sudo apt-get update
sudo apt-get install python3 scamper git

# 4. 克隆并运行
git clone https://github.com/your-username/scamper_traceroute_collector.git
cd scamper_traceroute_collector
sudo python3 main.py --targets targets.csv --output results.csv

macOS用户(使用Docker)

# 1. 安装Docker Desktop for Mac

# 2. 克隆项目
git clone https://github.com/your-username/scamper_traceroute_collector.git
cd scamper_traceroute_collector

# 3. 运行Ubuntu容器
docker run -it -v $(pwd):/app ubuntu:latest bash

# 4. 在容器中安装依赖并运行
apt-get update && apt-get install -y python3 scamper
cd /app
python3 main.py --targets targets.csv --output results.csv

使用方法

基本用法

sudo python3 main.py --targets <目标IP文件> --output <输出文件>

带日志记录

sudo python3 main.py --targets targets.csv --output results.csv --log app.log

命令行参数

参数 必需 说明
--targets 包含目标IP的CSV文件路径
--output 输出CSV文件路径
--log 日志文件路径(可选)

查看帮助

python3 main.py --help

输入输出格式

输入格式 (targets.csv)

# 目标IP列表(支持注释和空行)
8.8.8.8
1.1.1.1
114.114.114.114

# 可以添加注释
# 空行会被自动跳过

格式要求:

  • 每行一个IPv4地址
  • 支持空行(自动跳过)
  • 支持注释行(以#开头,自动跳过)
  • 必须是有效的IPv4格式(0-255.0-255.0-255.0-255)

输出格式 (results.csv)

target_ip,probe_source,hop_count,hop_1_ip,hop_1_rtt_ms,hop_2_ip,hop_2_rtt_ms,...
8.8.8.8,localhost,15,172.30.48.1,0.405,192.168.126.18,4.702,...
1.1.1.1,localhost,12,172.30.48.1,0.512,192.168.126.18,5.123,...

列说明:

  • target_ip: 目标IP地址
  • probe_source: 固定为"localhost"(表示从本机发起)
  • hop_count: 总跳数
  • hop_N_ip: 第N跳的IP地址(无响应时为***)
  • hop_N_rtt_ms: 第N跳的往返时间(毫秒)(无响应时为-1.0)

特殊值:

  • ***: 表示该跳无响应
  • -1.0: 表示该跳的RTT无法测量

日志输出示例

2026-03-15 20:07:55,262 - scamper_collector - INFO - 成功: 8.8.8.8 (15 跳)
2026-03-15 20:08:56,745 - scamper_collector - ERROR - ExecutionError: scamper执行超时 | 上下文: target_ip=9.9.9.9
2026-03-15 20:09:57,447 - scamper_collector - INFO - 摘要: 总数=3, 成功=1, 失败=2, 无响应=0

项目结构

scamper_traceroute_collector/
│
├── main.py                    # 主程序入口
│
├── src/                       # 源代码目录
│   ├── __init__.py           # 包初始化
│   ├── exceptions.py         # 自定义异常类
│   ├── models.py             # 数据模型
│   ├── csv_parser.py         # CSV解析器
│   ├── scamper_executor.py   # Scamper执行器
│   ├── result_parser.py      # 结果解析器
│   ├── csv_exporter.py       # CSV导出器
│   ├── batch_orchestrator.py # 批处理协调器
│   └── logger.py             # 日志记录器
│
├── examples/                  # 示例数据
│   └── targets.csv           # 目标IP示例
│
├── README.md                  # 本文件
└── requirements.txt           # Python依赖(空)

核心模块说明

  • exceptions.py - 定义ParseError、ExecutionError、ExportError
  • models.py - 定义HopInfo、TracerouteResult、BatchResult数据类
  • csv_parser.py - 解析和验证目标IP文件
  • scamper_executor.py - 执行scamper命令并捕获输出
  • result_parser.py - 解析scamper的JSON输出
  • csv_exporter.py - 将结果导出为CSV格式
  • batch_orchestrator.py - 协调批处理流程
  • logger.py - 记录日志和统计信息

常见问题

Q1: 为什么需要sudo权限?

scamper需要发送原始网络数据包(raw sockets),这需要root权限。

sudo python3 main.py --targets targets.csv --output results.csv

Q2: 某些IP超时怎么办?

超时是正常的,可能原因:

  • IP不可达
  • 网络路径太长
  • 目标主机不响应ICMP

程序会继续处理其他IP,超时的IP会在日志中标记为失败。

Q3: 如何增加超时时间?

编辑 src/scamper_executor.py,修改:

DEFAULT_TIMEOUT = 60  # 改为更大的值,如120

Q4: 可以在Windows上运行吗?

不能直接运行,但可以使用WSL:

  1. 安装WSL: wsl --install
  2. 在WSL中安装scamper
  3. 在WSL中运行程序

Q5: scamper如何选择源IP?

scamper根据系统路由表自动选择最佳源IP,无法手动指定。

Q6: 输出CSV文件很大怎么办?

可以:

  1. 分批处理目标IP
  2. 使用gzip压缩:gzip results.csv
  3. 只保留需要的列(需修改代码)

Q7: 支持IPv6吗?

当前版本仅支持IPv4。

Q8: 如何并行处理提高速度?

当前版本是顺序处理。如需并行,需要修改 src/batch_orchestrator.py 使用多进程。


架构设计

数据流程

目标IP文件 (targets.csv)
    ↓
CSV解析器 → 验证IP地址
    ↓
批处理协调器 → 逐个处理目标
    ↓
Scamper执行器 → 执行追踪路由
    ↓
结果解析器 → 提取跳信息
    ↓
CSV导出器 → 生成输出CSV
    ↓
日志系统 → 记录统计信息
    ↓
输出CSV文件 + 日志文件

错误处理策略

  • 输入错误: 立即抛出ParseError,停止执行
  • 执行错误: 记录错误,继续处理其他目标
  • 导出错误: 抛出ExportError,停止执行

性能说明

  • 处理方式: 顺序处理(可扩展为并行)
  • 超时设置: 每个追踪路由60秒超时
  • 内存占用: 所有结果保存在内存中,最后统一导出
  • 处理速度: 取决于网络延迟和目标响应时间

示例性能数据:

  • 3个目标IP
  • 1个成功(15跳)
  • 2个超时
  • 总耗时:173.89秒

开发说明

添加新功能

  1. src/ 目录中创建新模块
  2. main.py 中导入使用
  3. 更新本README

代码规范

  • 文件名:小写字母,下划线分隔
  • 类名:大驼峰命名
  • 函数名:小写字母,下划线分隔
  • 所有注释和文档使用中文

许可证

MIT License

Copyright (c) 2026

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


贡献

欢迎提交Issue和Pull Request!


联系方式

如有问题或建议,请通过GitHub Issues联系。


⭐ 如果这个项目对你有帮助,请给个Star!

About

Automated scamper data collection

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages