#packet #windows #sniffing

pack2

windows ipv4数据包嗅探

4个版本

0.1.3 2022年5月31日
0.1.2 2022年5月31日
0.1.1 2022年5月31日
0.1.0 2022年5月31日

#10 in #sniffing

MIT/Apache

10KB
70 代码行

windows数据包嗅探

API

此crate提供了一个函数recv_all_socket,该函数创建一个接收所有传入和传出ipv4数据包的socket2::Socket

示例

use pack2::recv_all_socket;
use std::mem::MaybeUninit;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let socket = recv_all_socket()?;

    let mut buf = vec![0u8; 65535];
    loop {
        // This is safe as described in the documentation of socket2::Socket::recv_from
        let buf_maybe = unsafe { &mut *(&mut buf[..] as *mut [u8] as *mut [MaybeUninit<u8>]) };
        let (read, addr) = socket.recv_from(buf_maybe)?;
        println!("received {} bytes from {:?}", read, addr);
    }
}

lib.rs:

提供了一个函数[recv_all_socket],该函数创建一个接收所有传入和传出ipv4数据包的Socket。

示例

use pack2::recv_all_socket;
use std::mem::MaybeUninit;

let socket = recv_all_socket()?;

let mut buf = vec![0u8; 65535];
loop {
    // This is safe as described in the documentation of socket2::Socket::recv_from
    let buf_maybe = unsafe { &mut *(&mut buf[..] as *mut [u8] as *mut [MaybeUninit<u8>]) };
    let (read, addr) = socket.recv_from(buf_maybe)?;
    println!("received {} bytes from {:?}", read, addr);
}

依赖项

~130MB
~2M SLoC