一个使用 Rust 编写的简单 ping 工具实现(支持 macOS / Linux,IPv4,阻塞 I/O)。
- 使用
socket2创建原始套接字发送 ICMP Echo Request - 支持指定:
- 请求次数 (
-c/--count) - 间隔时间 (
-i/--interval) - 超时时间 (
-W/--timeout) - 负载大小 (
-s/--size)
- 请求次数 (
- 自动计算 ICMP 校验和
- 匹配
id + seq确保只处理属于本进程的回应 - 支持 macOS/BSD 与 Linux 在 ICMP 报文结构上的差异(是否含 IP 头)
- 代码中包含大量注释,适合学习网络编程与协议解析
需要 Rust 1.70+,并在 macOS 或 Linux 下运行(需要原始套接字权限)。
cargo build# 构建
cargo build --release
# 使用 sudo 运行
sudo ./target/release/ping 8.8.8.8
# 或指定参数
sudo ./target/release/ping -c 5 -i 0.5 -W 2 -s 64 www.rust-lang.org参数说明:
-c, --count <COUNT> 发送次数 [默认: 4]
-i, --interval <INTERVAL> 间隔(秒) [默认: 1]
-W, --timeout <TIMEOUT> 超时时间(秒) [默认: 3]
-s, --size <SIZE> 负载字节数 [默认: 56]
本项目采用 MIT License 协议,允许自由复制、修改、分发和商用,但需保留版权声明。