Dort finde ich auch folgende Daten wieder:
wifi:mode : sta (c4:4f:33:0f:fe:71)
0xc4, 0x4f, 0x33, 0x0f, 0xfe, 0x71
buf->a, "THIS IS A CHAR");
0x54, 0x48, 0x49, 0x53, 0x20, 0x49, 0x53, 0x20, 0x41, 0x20, 0x43, 0x48,
0x41, 0x52,
Meine Absender MAC und meinen String (strcpy(buf->a, "THIS IS A CHAR")).
Nun bin ich aber leider am Ende.
Wie finde ich in dem HEX-Packet was ich gesendet habe und bekomme es
wieder Sinvoll zusammen?
Siehe a) b) c) d) (Meine Testfälle):
1
/* User defined field of ESPNOW data in this example. */
2
typedefstruct{
3
uint8_ttype;//Broadcast or unicast ESPNOW data.
4
uint8_tstate;//Indicate that if has received broadcast ESPNOW data or not.
5
uint16_tseq_num;//Sequence number of ESPNOW data.
6
uint16_tcrc;//CRC16 value of ESPNOW data.
7
uint32_tmagic;//Magic number which is used to determine which device to send unicast ESPNOW data.
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.
G. K. schrieb:> 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..
Welle 🧐 S. schrieb:> 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
Tu was du nicht lassen kannst.
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.
Jörg
Joerg W. schrieb:> 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.
Welle 🧐 S. schrieb:> Warum die Werte INT,FLOAT,BOOL Rückwärts im Buffer stehen, keine Ahnung.
Passt doch, xtensa (und auch X86 und Cortex-M) hat little endianness.
N. M. schrieb:> 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.
Hallo Mani,
ist es das was Du meinst?
Welle 🧐 S. schrieb:> ist es das was Du meinst?
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.
Danke für den Anstoss mit Wireshark, ich habe vorher die ganze Zeit
gehirnt warum mein Packet nicht wie das bei Espressif beschrieben
aussieht :)
Das ganze Radiotap Geraffel hatte ich verdrängt.