13 个版本
使用旧的 Rust 2015
0.2.4 | 2023 年 10 月 5 日 |
---|---|
0.2.3 | 2021 年 6 月 15 日 |
0.2.2 | 2021 年 3 月 2 日 |
0.2.0 | 2020 年 12 月 14 日 |
0.1.1 | 2018 年 12 月 6 日 |
#269 in 网络编程
837 每月下载次数
用于 7 个 Crates (6 个直接使用)
27KB
537 行
fastping-rs
受 go-fastping 和 AnyEvent::FastPing Perl 模块启发的 Rust ICMP ping 库
fastping-rs 是一个 Rust ICMP ping 库,受 go-fastping 和 AnyEvent::FastPing Perl 模块 的启发,用于快速发送和测量批量 ICMP ECHO REQUEST 数据包。
用法
Pinger::new
返回一个包含实际 ping 发送器和用于监听 ping 结果的通道的元组。ping 结果将是一个 PingResult::Receive
(如果 ping 响应在最大允许的往返时间之前收到)或一个 PingResult::Idle
(如果响应未及时收到)。
使用示例运行
git clone https://github.com/bparli/fastping-rs
cd fastping-rs
sudo RUST_LOG=info cargo run --example ping
示例
将一些 crate 添加到您的依赖项中
log = "0.4"
pretty_env_logger = "0.4"
fastping-rs = "0.2"
然后在您的 main.rs
中开始
extern crate pretty_env_logger;
#[macro_use]
extern crate log;
use fastping_rs::PingResult::{Idle, Receive};
use fastping_rs::Pinger;
fn main() {
pretty_env_logger::init();
let (pinger, results) = match Pinger::new(None, Some(56)) {
Ok((pinger, results)) => (pinger, results),
Err(e) => panic!("Error creating pinger: {}", e),
};
pinger.add_ipaddr("8.8.8.8");
pinger.add_ipaddr("1.1.1.1");
pinger.add_ipaddr("7.7.7.7");
pinger.add_ipaddr("2001:4860:4860::8888");
pinger.run_pinger();
loop {
match results.recv() {
Ok(result) => match result {
Idle { addr } => {
error!("Idle Address {}.", addr);
}
Receive { addr, rtt } => {
info!("Receive from Address {} in {:?}.", addr, rtt);
}
},
Err(_) => panic!("Worker threads disconnected before the solution was found!"),
}
}
}
注意 Pinger 使用两个参数初始化:在将地址视为 "空闲" 之前的最大往返时间(默认为 2 秒)和 ping 数据包的大小(默认为 16 字节)。要显式设置这些值,Pinger 将如此初始化
Pinger::new(Some(3000 as u64), Some(24 as usize))
公共函数 stop_pinger()
用于停止连续的 ping 发送器和 ping_once()
用于仅运行一轮 ping。
其他注意事项
此库需要创建原始套接字的能力。可以通过以下方式显式设置程序(例如:sudo setcap cap_net_raw=eip /usr/bin/testping
)或以root用户身份运行。
目前仅支持Linux和OSX(Windows可能无法使用)。
依赖关系
约3–5MB
约86K SLoC