kawaiifi is a Wi-Fi scanning toolkit for Linux, macOS, and Windows.
It discovers local Basic Service Sets (BSSs) and reports their SSID, BSSID, signal strength, channel, channel width, security protocols, and information elements (IEs).
This repository contains:
kawaiifi- the Rust library crate.kawaiifi-ffi- C-compatible FFI bindings for the Rust library.Kawaiifi.Net- .NET wrapper around the Rust library.kawaiifi-gui- Wi-Fi scanner app for Linux.
kawaiifi uses each platform's built-in Wi-Fi API:
| Platform | API |
|---|---|
| Linux | NetworkManager and nl80211 (Netlink) |
| macOS | CoreWLAN |
| Windows | Native Wifi (Win32) |
Wi-Fi scanning is often restricted by operating systems because nearby BSS data can be used to determine physical location and other sensitive information.
kawaiifi uses nl80211 to enumerate Wi-Fi interfaces and retrieve scan results.
It uses NetworkManager to trigger scans, which avoids requiring root privileges
or the CAP_NET_ADMIN capability.
Sandboxed packages may need additional permissions to use both nl80211 and
NetworkManager. For example, Snap packages require the network-control interface
for nl80211 and the network-manager interface for NetworkManager.
Scanning via CoreWLAN uses
CWInterface.scanForNetworks. If location services are not enabled for the
application, SSIDs, BSSIDs, and information element data may be unavailable.
Enable location services for your application in System Settings → Privacy &
Security → Location Services.
The command-line examples in this repository are not packaged as identified macOS applications and do not request location authorization. When run from a terminal, their scan results therefore have unavailable SSIDs, BSSIDs, and information element lists.
Scanning via Native Wifi uses WlanScan and WlanGetNetworkBssList. The first time an
application calls these APIs, Windows displays a one-time prompt for precise
location access. If the user does not grant consent, scans fail with
ERROR_ACCESS_DENIED.
See CHANGELOG.md for release notes.
Dual-licensed under MIT or Apache 2.0.