2024-01-05 16:12:09 -05:00
# 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.
2024-01-05 16:29:57 -05:00
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.
2024-01-05 16:12:09 -05:00
# 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.
2024-01-05 16:29:57 -05:00
# 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 )
2024-01-06 15:59:48 -05:00
### Radiotap
* [radiotap.org ](https://www.radiotap.org/ )