3 个版本
0.1.6 | 2024 年 5 月 11 日 |
---|---|
0.1.5 |
|
0.1.4 | 2024 年 1 月 29 日 |
#36 in #packet-parser
每月 27 次下载
38KB
670 行
simple_wifi
是一个用于快速解码 802.11 Wi-Fi 数据包的模块
simple_wifi
接收原始数据包并提供数据包名称、数据包类型、数据包子类型、toDS、FromDS、信号、信道、地址1、地址2、地址3、地址4、SSID。它还允许您将数据包写入 pcap 文件。
更新
现在您可以将解码过程中出错的数据包写入 pcap 文件。增加了更多的 RadioTap Header 长度以供解码。添加了对 DMG 信标的解码。数据包类型:3 子类型:0。添加了另一个 ssid 以查看所有字符是否为空。如果是,则 ssid 将为 "U_n_k_n_o_w_n"。
测试
simple_wifi
在使用 Alpha Wi-Fi 卡的 Linux Debian 发行版上进行了测试。使用模块 pnet
打开套接字并嗅探 Wi-Fi 卡的数据包。
示例
# extern crate pnet;
# extern crate simple_wifi;
use pnet::datalink::{ self, NetworkInterface, Channel::Ethernet};
use simple_wifi::*;
use std::process;
fn main() {
// Wi-Fi card to sniff packets with.//!
let wifi_card: &str = "wlo1";
// Finding the interface that matches the wifi_card. So it can be used for sniffing.
let interface: NetworkInterface = datalink::interfaces()
.into_iter()
.filter(|iface: &NetworkInterface| iface.name == wifi_card)
.next()
.unwrap();
// Setting up the channel to the interface so you can sniff Wi-Fi packets.
let (_, mut rx) = match datalink::channel(&interface, Default::default()) {
Ok(Ethernet(tx, rx)) => (tx, rx),
Ok(_) => {
println!("\x1b[38;5;9mUnhandled channel type\x1b[0m");
process::exit(0);
},
Err(e) => {
println!("\x1b[38;5;9mAn error occurred when creating the datalink channel: {e}\x1b[0m");
process::exit(0);
}
};
loop {
let pkt: &[u8] = match rx.next() {
Ok(pkt) => pkt,
Err(_) => continue
};
let pkt_info: Packet = match Packet::new(pkt) {
Ok(t) => t,
Err(e) => {
println!("\x1b[38;5;9m{e}\x1b[0m");
let _ = write_pcap(&pkt.to_vec(), "/home/user/error.pcap");
continue;
}
};
println!("{pkt_info:#?}");
println!(
"Address1: {}, Address2: {}\nAddress3: {}, Address4: {}",
pkt_info.addr1, pkt_info.addr2, pkt_info.addr3, pkt_info.addr4
)
}
}
依赖项
~345KB