48 lines
2.3 KiB
Markdown
48 lines
2.3 KiB
Markdown
# ifnow
|
|
A Linux network interface device for communication over the ESP-Now wireless broadcast protocol.
|
|
|
|
NOTE: This is EXTREMELY work in progress and as it requires root permissions is not recommended to be run unmonitored.
|
|
|
|
This code would not be possible without the groundwork done by the [Linux-ESPNOW](https://hackaday.io/project/161896-linux-espnow)[[github](https://github.com/thomasfla/Linux-ESPNOW)] project. They put in a huge amount of work to reverse engineer the ESP-Now protocol and provided some [example code](https://github.com/thomasfla/Linux-ESPNOW) that this was heavily based on.
|
|
|
|
Additionally [this article by John Millikin](https://john-millikin.com/creating-tun-tap-interfaces-in-linux)
|
|
was an extremely helpful refresher on working with a Tun/Tap interface.
|
|
|
|
# Build
|
|
```
|
|
git clone https://git.oit.cloud/morgan/ifnow.git
|
|
cd ifnow
|
|
mkdir build
|
|
cd build
|
|
cmake ../
|
|
make
|
|
```
|
|
|
|
This should result in the `ifnow` binary in the build directory.
|
|
|
|
# Usage
|
|
This is two steps, first setting up monitoring mode (using aircrack-ng in this method). You will need to determine
|
|
your wireless interface name and replace if different from `wlp2s0` in the example. You will also want to set the
|
|
channel to match the ESP32 configuration.
|
|
|
|
```
|
|
sudo airmon-ng start wlp2s0
|
|
sudo iw wlp2s0 set channel 1
|
|
./ifnow wlp2s0mon now1 10.10.0.13
|
|
```
|
|
|
|
The interface is now up as `now1` and you should be able to write to this interface. In theory `pcap` can
|
|
be used to intercept raw packets but if used with LwIP on the ESP32 end, which can be accomplished with
|
|
[esp_netif_now](https://git.oit.cloud/morgan/esp_netif_now), any IP stack should work. Has been testing
|
|
with UDP and some [CoAP](https://libcoap.net). There are definitely still issues with parsing some incoming
|
|
packets.
|
|
|
|
# Reference Material
|
|
These are resources I relied on during development to help me better understand the
|
|
Linux network interface stack. Unfortunately there is not a lot of reference material on ESP-Now,
|
|
Espressif only ships a binary blob and header file.
|
|
|
|
### UDP/IP Stack
|
|
* [IPv4 Header](https://en.wikipedia.org/wiki/Internet_Protocol_version_4)
|
|
* [UDP Datagram structure](https://en.wikipedia.org/wiki/User_Datagram_Protocol#UDP_datagram_structure)
|
|
* [Universal TUN/TAP device driver](https://www.kernel.org/doc/html/latest/networking/tuntap.html)
|