ifnow/README.md

49 lines
2.3 KiB
Markdown
Raw Normal View History

# 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.
# 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)