#ping #icmp #echo #request #packets #sending #quickly

fastping-rs

用于快速发送和测量批量 ICMP ECHO REQUEST 数据包的 ICMP ping 库

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 网络编程

Download history 95/week @ 2024-04-08 88/week @ 2024-04-15 74/week @ 2024-04-22 62/week @ 2024-04-29 90/week @ 2024-05-06 176/week @ 2024-05-13 129/week @ 2024-05-20 110/week @ 2024-05-27 138/week @ 2024-06-03 167/week @ 2024-06-10 103/week @ 2024-06-17 163/week @ 2024-06-24 201/week @ 2024-07-01 241/week @ 2024-07-08 140/week @ 2024-07-15 241/week @ 2024-07-22

837 每月下载次数
用于 7 个 Crates (6 个直接使用)

MIT 许可证

27KB
537

fastping-rs

受 go-fastping 和 AnyEvent::FastPing Perl 模块启发的 Rust ICMP ping 库

fastping-rs 是一个 Rust ICMP ping 库,受 go-fastpingAnyEvent::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