基于 Winsock2 RAW SOCKET 的命令行 Ping 工具,支持 RTT/丢包统计、TTL 输出、日志记录、批量主机列表,以及 Ctrl+C 优雅退出,可作为计算机网络课程设计示例或日常诊断工具。
- RAW SOCKET 构建并解析 ICMP Echo Request/Reply,仅依赖 Winsock2。
- 支持域名解析,可配置发送次数、负载大小(-l/-s)、单次超时时间。
- 可选输出 TTL,统计最小/最大/平均 RTT 及标准差,并计算丢包率。
--log同步将终端输出写入文件,便于保存实验数据或报告。- 捕获 Ctrl+C 优雅结束,仍会输出当前统计;输出使用 UTF-8,日志与终端一致。
--batch可按行读取主机列表,批量依次 ping,空行或以#开头的行会被忽略。
- Windows 10/11,命令行需可用 Winsock2。
- 创建 RAW SOCKET 通常需要管理员权限,请以管理员身份运行终端或 VS Code。
- 推荐使用 VS Code + MSYS2 UCRT64 g++,或安装 Visual Studio/Build Tools 提供的
cl.exe。
- VS Code 任务:
Ctrl+Shift+B选择Build myping,在bin/myping.exe生成可执行。F5将用launch.json中默认参数(127.0.0.1 -n 4 -l 32 --ttl)启动调试。 - 手动(Visual Studio 开发者命令行):
mkdir bin 2>nul cl /Zi /EHsc /std:c++17 /nologo /Fe:bin\myping.exe src\main.cpp ws2_32.lib
- 手动(MSYS2 UCRT64 g++):
(if not exist "bin" mkdir bin) & "C:/msys64/ucrt64/bin/g++.exe" -std=c++17 -g -o bin\myping.exe src\main.cpp -lws2_32
myping.exe host [选项]
myping.exe --batch list.txt [选项] # 批量模式,host 与 --batch 互斥主要参数:
| 参数 | 说明 |
|---|---|
host |
目标主机名或 IPv4 地址(必选,批量模式则由列表提供) |
-n count |
发送次数,默认 4,范围 1-10000 |
-l size / -s size |
ICMP 负载长度,默认 32,范围 1-1024 |
-w timeout |
单次请求超时时间(毫秒),默认 1000,范围 10-60000 |
--ttl |
在每次回复中输出 TTL(解析 IP 头部) |
--log file |
将终端输出同时追加写入指定文件 |
--batch file |
按行读取主机列表并依次 ping,忽略空行和 # 注释 |
-h / --help |
打印使用说明并退出 |
输出包含每次 Echo Reply 的 RTT(可选 TTL)以及最终的最小/最大/平均/标准差 RTT 与丢包统计。按 Ctrl+C 会提前结束发送,但仍会打印当前统计。
- 单主机:
.\bin\myping.exe 8.8.8.8 -n 6 -l 64 -w 2000 --ttl --log logs\google.log
- 批量主机(示例 list.txt):
# 注释和空行会忽略 1.1.1.1 8.8.8.8 bing.com.\bin\myping.exe --batch list.txt -n 3 -l 32 --ttl
logs/sample-log.txt 提供了一次本地回环测试的完整输出,可直接引用到实验报告。
- 不提交构建产物:
bin/、*.exe、*.dll。 - 不提交本地日志:
logs/。 - 不提交本机编辑器配置:
.vscode/。 - 不提交 Windows 快捷方式:
*.lnk。
以上内容已写入 .gitignore,确保仓库只包含源码、说明文档和必要的资源文件。
- 127.0.0.1 或本机 IP:验证环境与工具链正常。
- 局域网地址:观察 RTT 与丢包情况。
- 公网稳定地址(如 8.8.8.8):体验统计数据,验证日志输出。
- 错误场景:输入不存在的域名、非法参数或不可达地址,确认错误提示。
- Ctrl+C 中断:确保能看到即时统计并优雅退出。
如需将工具加入 PATH,请按实际环境调整 README 末尾的 PowerShell 示例或直接在任务配置里指定编译输出目录。