Coverage Status Build Status License: MIT contributions welcome

nl80211

API documentation

This crate aims to provide a low level access to nl80211.

This crate is inspired by the go wifi package made by @mdlayher.

:warning: This library only works on Linux.

:warning: This crate is a work in progress

Built-in functions

This crate has some built-in functions to fetch information and metrics of wifi interfaces and wireless networks.

Get interface information

```rust extern crate nl80211; extern crate neli;

use nl80211::Socket; use nl80211::PrettyFormat;

fn main() -> Result<(), neli::err::NlError> { let interfaces = Socket::connect()?.getinterfacesinfo()?;

for interface in interfaces { println!("{:#?}", interface);

  // Interface {
  //   index: Some([3, 0, 0, 0]),
  //   ssid: Some([101, 100, 117, 114, 111, 97, 109]),
  //   mac: Some([255, 255, 255, 255, 255, 255]),
  //   name: Some([119, 108, 112, 53, 115, 48]),
  //   frequency: Some([108, 9, 0, 0]),
  //   channel: Some([1, 0, 0, 0]),
  //   power: Some([164, 6, 0, 0]),
  //   phy: Some([0, 0, 0, 0]),
  //   device: Some([1, 0, 0, 0, 0, 0, 0, 0])
  // }

  println!("{}", interface.pretty_format());

  // essid : eduroam
  // mac : FF:FF:FF:FF:FF:FF
  // interface : wlp5s0
  // frequency : 2.412 Ghz
  // channel : 1
  // power : 17 dBm
  // phy : 0
  // device : 1
}

Ok(())

} ```

Get Access Point information and metrics

```rust extern crate nl80211; extern crate neli;

use nl80211::Socket; use nl80211::PrettyFormat;

fn main() -> Result<(), neli::err::NlError> { let interfaces = Socket::connect()?.getinterfacesinfo()?; for interface in interfaces { let station = interface.getstationinfo(); println!("{}", station?.pretty_format());

  // bssid : FF:FF:FF:FF:FF:FF
  // connected time : 35.816666 minutes
  // beacon loss : 0
  // signal : -60 dBm
  // average signal : -61 dBm
  // rx packets : 148983
  // tx packets : 46335
  // rx bitrate : 60 Mb/s
  // tx bitrate : 140 Mb/s
  // tx retries : 12578
  // tx failed : 2

}

Ok(()) } ```

Todo