Ich bin mir nicht sicher, ob die Adresse immer gleich ist. Eine mögliche Lösung wäre, die Daten am mit einer Magic-Number zu versehen und diese im Empfangsframe zu suchen.
Warum nutzt du raw-sockets und ?L2?-Broadcast?
Und Daten kann man auch wunderbar und portabel in ASCII verpacken.
Hallo Zumsel, der Trick by ESPNOW ist das die die Packete in einem
nackten 802.11 Frame übertragen ohne Protokoll ... das ist sehr schnell (usec) und leichtgewichtig ... allersings passen nur 250byte rein, was für Sensordaten/Steuerbefehle mehr als genug ist ...
es geht natürlich nur Headsup - allerdings draussen bis 100m (500m mit Antennengewinn), indoor je nach Bausubstanz..
Hallo Zumsel, der Trick by ESPNOW ist das die die Packete in einem
nackten 802.11 Frame übertragen ohne Protokoll ... das ist sehr schnell
(usec) und leichtgewichtig
Ich stand schon vor einem ähnlichen Problem, habe es aber dann mit einem "Gateway" auf einem eigenen ESP32 Modul gelöst (Übertragung dann via UART2).
Und wenn ich sehe, dass man die Frames mehr oder weniger problemlos mitschneiden und "spoofen" kann, bin ich im Nachhinein froh, dass ich Verschlüsselung und Authentifizierung gleich mit in das übergeordnete Protokoll eingebaut habe.
Ursprünglich hatte ich übrigens BLE vorgesehen, das hat aber letztendlich viel längere "On" Zeiten auf den batteriebetriebenen Sensoren verursacht.
Und wenn ich sehe, dass man die Frames mehr oder weniger problemlos
mitschneiden und "spoofen" kann, bin ich im Nachhinein froh, dass ich
Verschlüsselung und Authentifizierung gleich mit in das übergeordnete
Protokoll eingebaut habe.
Hallo Jörg, klar kannste die mitschneiden, es sind Broadcast :)
Unicast sind natürlich verschlüsselt.
Unicast ist mir aber zu Aufwändig, weill man Schlüssel und MACs
austauschen/hinterlegen muss.
1
if(IS_BROADCAST_ADDR(des_addr)){
2
/* If added a peer with encryption before, the receive packets may be
3
* encrypted as peer-to-peer message or unencrypted over the broadcast channel.
4
* Users can check the destination address to distinguish it.
Ich würde mir vermutlich kurz einen Dissector für Wireshark schreiben. Dann kann man einfach Mal so mithören und das Zeug sich vernünftig anschauen.
Den Dissector kannst du später dann auch in deiner eigenen Applikation nutzen.
Ich würde mir vermutlich kurz einen Dissector für Wireshark schreiben.
Dann kann man einfach Mal so mithören und das Zeug sich vernünftig
anschauen.
Den Dissector kannst du später dann auch in deiner eigenen Applikation
nutzen.
Ne nicht wirklich. Aber geht vermutlich auch. Viele Wege führen nach Rom.
Ich setze mir bei so Sachen gerne einen Lua Dissector auf. Nicht weil ich Lua mag, sondern weil es dann Plattform unabhängig ist:
https://wiki.wireshark.org/lua/dissectors
Zum anschauen, analysieren, filtern usw echt praktisch.
TShark kann mit dem gleichen Dissector auch JSON/XML o.ä. streamen. Wenn man sich dann an den Stream hängt hat man die Daten in seiner Applikation ohne selbst wissen zu müssen wie sie dissectiert werden müssen.