# PingAnalysisForLinux **Repository Path**: ccmmyc/ping-analysis-for-linux ## Basic Information - **Project Name**: PingAnalysisForLinux - **Description**: PingAnalysis 是一个服务于Linux平台用于ICMP数据包传输与分析的工具,具备以下功能: ICMP回显请求/应答的传输记录功能、自定义激励信号生成及频域数据分析与可视化功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 4 - **Created**: 2024-12-11 - **Last Updated**: 2025-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PingAnalysis #### 项目概述 PingAnalysis 是一个服务于Linux平台用于ICMP数据包传输与分析的工具,具备以下功能: - ICMP回显请求/应答的传输记录功能 - 自定义激励信号生成 - 频域数据分析与可视化功能 #### 主要功能 ping_program: ACTIVE模式 - 按指定间隔发送ICMP回显请求包 - 通过生成MLS(最大长度序列)信号来获取信道的频率响应 - 使用高精度计时器记录精确的传输时间戳 - 测量每个数据包的往返时间(RTT) - 记录详细的数据包信息,包括: - 序列号 - 发送时间 - 接收时间 - RTT - 发送频率 - 发送间隔 - 负载大小 LISTEN模式 - 响应来自其他主机的ICMP回显请求 - 保持相同的精确计时和日志记录功能 - 支持自配置: - 数据包间隔(微秒级精度) - 数据包大小 - 数据包数量 - 目标IP地址 plot: - 绘制原始信号 `x` 与其频域表示 `X` 的对比图 - 绘制原始信号 `y` 与其频域表示 `Y` 的对比图 - 绘制抖动(`Jitter`)与其频域表示 `Z` 的对比图 - 绘制频率响应 `Y/X` - 绘制频率响应 `Z/X` #### 环境依赖 可以在自己主机按如下命令安装 `pip install pandas matplotlib numpy argparse` 安装qmake ``` sudo apt install qt5-qmake sudo apt install qtbase5-dev ``` #### 代码编译方法 ``` qmake ping_program.pro make ``` #### 使用方法 sudo ./ping_program <目标IP> <总包数> <发包频率> <模式 1=输入文件信号 2=随机生成MLS信号> <信号文件源> <主机标识> --active|--listen 参数说明: - <目标IP>:目标主机的IP地址。 - <总包数>:发送的ICMP回显请求总数。 - <发包频率>:指定数据包发送的频率,单位为包/秒。 - <模式>: - 1:输入信号文件。 - 2:随机生成MLS信号。 - <信号文件源>: - 模式1:填写信号文件的路径,文件内容每行包含一个二进制值 1 或 0。 - 注意:总包数应小于或等于信号文件中的数据行数。如果总包数大于文件行数,可能会导致问题。 - 模式2:填写格式为 n{nbits}s{initseed} 的字符串,其中: - nbits:指定生成信号序列的位数,信号序列的长度为 2^nbits - 1。 - initseed:MLS生成的初始种子,相同的种子会生成相同的信号序列。 - 示例:n10s12,表示生成一个长度为1023的信号序列,初始种子为12(不要超过 2^nbits - 1)。 - 在这种模式下,<总包数> 应该与生成的信号长度对应。 - <主机标识>:主机的标识符,用于区分不同的设备。 - --active:激活模式,发送ICMP请求并记录数据。 - --listen:监听模式,响应来自其他主机的ICMP请求。 #### 示例流程 ##### 1. 把labenv文件夹拷贝进两台linux虚拟机 将 `labenv` 文件夹拷贝到两台虚拟机中,以便进行代码编译和实验运行。 ##### 2. 在两台虚拟机编译代码 根据 `labenv` 中的编译说明,在两台虚拟机上完成代码的编译。 ##### 3. 在labenv使用如下命令 虚拟机 B (监听方),IP: `10.9.130.72` - **使用固定信号文件**: ```bash sudo ./ping_program 10.9.130.122 100 1000 1 setup/signals/signal1.txt B --listen ``` - **使用 MLS 信号(与上面两者选其一)**: ```bash sudo ./ping_program 10.9.130.122 1023 1000 2 n10s12 B --listen ``` 虚拟机 A (发送方),IP: `10.9.130.122` - **使用固定信号文件**: ```bash sudo ./ping_program 10.9.130.72 100 1000 1 setup/signals/signal1.txt A --active ``` - **使用 MLS 信号(与上面两者选其一)**: ```bash sudo ./ping_program 10.9.130.72 1023 1000 2 n10s12 A --active ``` ##### 4.数据生成 在 `labenv/data` 目录下会生成本次实验的结果记录。每个实验数据将以 `{实验序列号}_{发包数量}_{信号序列文件}_{发包频率}_{主机标识}` 格式命名文件夹。 ##### 5.数据可视化 为了便于查看实验数据的对比图,执行以下步骤: 1. 将两个虚拟机获得的数据文件夹拖入 dataProcess 文件夹中。 2. 进入 dataProcess 目录,并运行数据绘制脚本: ```bash python ./plot.py ``` ##### 6.查看对比图 在运行完 `plot.py` 后,会在新生成的 `{实验序列号}_{发包数量}_{信号序列文件}_{发包频率}` 格式命名的文件夹中看到对比图。 #### 额外说明 1. **实验序列号管理** 实验序列号保存在 `setup/sequence_counter.txt` 文件中。每次实验运行时,程序会自动读取该文件,提取当前序列号并加1,然后将更新后的序列号重新写回文件。 2. **信号文件管理** 信号文件可以自行添加,目前 `setup/signals` 目录下包含以下信号文件: - `signal1.txt`:包含200个随机生成的 0/1 序列。 - `signal6.txt`:包含2000个全1序列。 3. **数据绘制** `plot.py` 会自动扫描文件夹并处理符合格式的数据文件。如果想指定处理特定文件夹,可以使用 `-f` 参数。示例命令: ```bash python ./plot.py -f 1_100_signal1_1000_A ``` 4. **查看程序帮助信息** 如果忘记了 ping_program 的参数,可以使用以下命令查看帮助信息: ```bash sudo ./ping_program -h ``` 5. **自动化采集脚本** 实际实验中,我们一般要采集大量样本数据,如果每次都手动采集,显然一次次修改参数是非常麻烦且容易出错的,因此增加了文件夹中的collectA.py和collectB.py用来完成这一任务,但是会有极小概率存在bug,所以新增加screen_data.py。这个脚本的作用是汇集文件夹中所有的实验信息,运行后会生成stats_summary.csv的表格,每次使用自动化采集脚本后一定要运行screen_data.py,检查实验信息,关注采集时间是否同时或者仅差1s,如果不是近似同时开始,此次实验数据需作废处理。