Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zingerlittlebee/netraffic
Statistics network traffic --- Rust Library
https://github.com/zingerlittlebee/netraffic
network port rust statistics traffic traffic-monitoring
Last synced: 4 days ago
JSON representation
Statistics network traffic --- Rust Library
- Host: GitHub
- URL: https://github.com/zingerlittlebee/netraffic
- Owner: ZingerLittleBee
- License: mit
- Created: 2022-05-25T13:06:22.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-23T17:10:10.000Z (3 months ago)
- Last Synced: 2025-01-10T06:36:57.386Z (11 days ago)
- Topics: network, port, rust, statistics, traffic, traffic-monitoring
- Language: Rust
- Homepage:
- Size: 39.1 KB
- Stars: 23
- Watchers: 2
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Language : ๐บ๐ธ English | [๐จ๐ณ ็ฎไฝไธญๆ](./README.zh-CN.md)
netraffic
[![Build Status](https://img.shields.io/crates/v/netraffic?style=for-the-badge)](https://crates.io/crates/netraffic)
![Crates Downloads](https://img.shields.io/crates/d/netraffic?style=for-the-badge)
![Last Commit](https://img.shields.io/github/last-commit/ZingerLittleBee/netraffic?style=for-the-badge)[![Docs](https://img.shields.io/docsrs/netraffic?style=for-the-badge)](https://docs.rs/netraffic/0.1.0/netraffic/)
[![GitHub Actions CI](https://img.shields.io/github/actions/workflow/status/ZingerLittleBee/netraffic/test.yml?style=for-the-badge)](https://github.com/ZingerLittleBee/netraffic/actions)
[![LICENSE](https://img.shields.io/crates/l/netraffic?style=for-the-badge)](./LICENSE)## Overview
netraffic is a rust library that provides ability to **statistics network traffic**.## Prerequisites
### Windows
Download the [WinPcap](http://www.winpcap.org/install/default.htm) Developer's Pack. Add the `/Lib` or `/Lib/x64` folder to your LIB environment variable.### Linux
Install `libpcap`On Debian based Linux, `apt install libpcap-dev`
### Mac OS X
libpcap should be installed on Mac OS X by default.## Installation
1. Get the latest version -> https://crates.io/crates/netraffic2. Add the dependent
```toml
[dependencies]
netraffic = "0.1.0"
```3. Usage
```rust
use std::{thread, time::Duration};
use netraffic::{Filter, Traffic};fn main() {
let mut traffic = Traffic::new();
// rule look here: https://biot.com/capstats/bpf.html
let rule1 = "port 443";
let rule2 = "src host 127.0.0.1";
traffic.add_listener(Filter::new("eth0".to_string(), rule1.to_string()));
traffic.add_listener(Filter::new("eth0".to_string(), rule2.to_string()));
loop {
thread::sleep(Duration::from_millis(1000));
println!(
"rule1: {}, traffic: {:#?} Bytes",
rule1,
traffic.get_data().get(rule1).unwrap().total
);
println!(
"rule2: {}, traffic: {:#?} Bytes",
rule2,
traffic.get_data().get(rule2).unwrap().total
);
}
}
```
> Learn More [Examples](#examples)## Examples
[๐ฅ Get network interface device](./examples/device.rs)[๐ฅ Statistical traffic](./examples/traffic.rs)
[๐ Calculate network speed](./examples/speed.rs)
## Goods
struct -> [Traffic](#traffic) ยท [Filter](#filter) ยท [Snapshot](#snapshot)mod (`device`) -> [get_device](#get_device) ยท [get_default_device](#get_default_device)
## Documentation
### `Traffic`
```rust
impl Traffic {
/// Init traffic
pub fn new() -> Self
/// Add a new filter to the traffic data center.
pub fn add_listener(&mut self, filter: Filter)
/// Remove a filter from the traffic data center.
pub fn remove_listener(&self, rule: String)
/// Suspend a listener by rule.
pub fn suspend_listener(&self, rule: String)
/// Resume a listener by rule.
pub fn resume_listener(&self, rule: String)
/// Get the traffic snapshot, until Rwlock is free.
pub fn get_data(&self) -> HashMap
/// Try to get the traffic snapshot.
/// if Rwlock is locked, return None.
pub fn try_get_data(&self) -> Option>
}
```### `Filter`
```rust
#[derive(Debug, Clone)]
pub struct Filter {
/// Name of network interface
pub device: String,
/// Filtering rules
/// BPF : https://biot.com/capstats/bpf.html
pub rule: String,
/// Whether the mode is immediately modeled, the default true
/// https://www.tcpdump.org/manpages/pcap_set_immediate_mode.3pcap.html
pub immediate_mode: bool,
}/// Init filter, the default immediate_mode = true
Filter::new("eth0".to_string(), "tcp port 80".to_string());
/// or set immediate_mode field
Filter {
device: "eth0".to_string(),
rule: "tcp port 80".to_string(),
immediate_mode: true,
}
```### `Snapshot`
```rust
#[derive(Debug, Clone, Copy)]
pub struct Snapshot {
/// The total byte after add_listener
pub total: u64,
/// The latest package of data byte
pub len: u64,
/// The latest package of data timestamp
pub timestamp: u64,
}
```### `get_device`
```rust
/// Get all network interface
pub fn get_device() -> Result, Error>
```### `get_default_device`
```rust
/// Get default network interface
pub fn get_default_device() -> Result
```## Thanks
[pcap](https://github.com/rust-pcap/pcap)