Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Windows C++ ICMP Ping

基于 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 示例或直接在任务配置里指定编译输出目录。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages