For many years I've been asked to provide support for external USB Wi-Fi adapters in WiFi Explorer. Many of these adapters are either not compatible with macOS or require the use of proprietary drivers provided by the manufacturer of the wireless chipset. In order to support these adapters in a native way, it is necessary to have access to the driver's source code. Unfortunately, manufacturers have expressed no interest or simply ignored my emails, which for some reason was a common occurrence last year for these and other collaboration attempts (sad face).

But there's a way. The External Adapter Support Environment (EASE) allows WiFi Explorer Pro to use certain external USB adapters for Wi-Fi scanning, as long as these adapters are compatible with Linux and support monitor mode. EASE is basically a lightweight Debian virtual machine (about 1.7 GB on disk, 256 MB RAM) that has been customized to leverage the remote sensor functionality to automatically configure an external adapter as a pseudo-local sensor. These pseudo-local sensors are listed in WiFi Explorer Pro separately from remote sensors, but they work in the same manner: capturing beacons while hopping between all supported channels.

The majority of users have no need to use external adapters, especially because the built-in adapter works great for scanning in active and passive mode. It also works great for packet captures. However, the main advantage for using an external adapter to scan for wireless networks is that you get the benefits of using passive mode without the need of disconnecting from the network. Passive scanning cannot be used while associated to a network because it requires the adapter to be put into monitor mode, but it can find hidden networks and networks that are farther away (see Understanding the Scan Modes in WiFi Explorer Pro). It also provides more consistent scan results than active scanning. If you're using an external adapter via EASE, the built-in adapter can still be used for connectivity.

One of the nice things about EASE is that you need zero knowledge about Linux or how to build or install the different drivers needed to use these external adapters. Creation and provisioning of the virtual machine is completely automatic using a tool called Vagrant, together with VirtualBox.

The installation is very simple:

1. Install Vagrant, VirtualBox and the VirtualBox Extension Pack.
2. Open Terminal and type:

git clone
cd ease
vagrant up

The installation of the environment takes a few minutes as the VM image is downloaded and provisioned. Once done, you will find a new VM in VirtualBox called EASE. At this point, EASE is ready to use and you can proceed to attach your external USB Wi-Fi adapter.

Using VirtualBox's USB Device Filters you can configure the environment so that every time you plug in the adapter to the USB port in your computer, the adapter is automatically connected to the EASE VM:

1. Plug in the adapter to any of the USB ports in your Mac.
2. Open VirtualBox and select the EASE VM.
3. Choose Settings > Ports > USB.
4. Add a USB filter by clicking the icon with the + sign and choosing the adapter you just plugged in.
5. Click OK, then unplug and plug back in the adapter.

VirtualBox USB Device Filters

If the adapter is recognized as a supported Wi-Fi adapter, it will be listed under the Scan Mode menu in the WiFi Explorer Pro's toolbar and you can choose the adapter for scanning.

External Adapters in WiFi Explorer Pro

The WiFi Explorer Pro integration with EASE is just the first step. It demonstrates the concept while extending WiFi Explorer Pro's functionality with the use of external adapters. My plan is to use EASE for truly simultaneous packet captures on multiple channels, which can be useful for troubleshooting roaming and other aspects of the Wi-Fi environment. I also plan to develop a solution to automatically attach the adapters to the EASE VM, as well as to manage EASE from the menu bar, thus eliminating the need to invoke Vagrant via its command line tool.

For more information about EASE, visit the project's GitHub page.