Public Access
LoRa Scanner: MeshCore by default, and its public channel read
The MeshCore preset is the default for a new device, in the Settings and in the radio before the Scanner is opened. The setting now accepts it: it only took the 7 Meshtastic presets, so MeshCore picked in the App was not saved. Messages on MeshCore's public channel are decrypted with the channel's published key (AES-128, checked with 2 bytes of HMAC-SHA256): the row shows who says they sent it and the start of the text, the details the sender, the time and the whole text. Other channels and private messages stay encrypted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162FokPdvY2KsS4NBfwyWPk
This commit is contained in:
@@ -44,7 +44,7 @@ tag = "M3"
|
||||
| Q92 | A **Radio Service** owns the SX1262: driver, bus lock, IRQ task. The LoRa Scanner uses it in M3; the Mesh Service sits on top of it in M4. |
|
||||
| Q93 | Every radio transfer takes the shared bus lock (`SPI.beginTransaction`, as the card does). DIO1's interrupt only wakes the task; no SPI in the ISR. **Done when** a Gemini page streams to the card while the Sniffer receives, with no lost packets and no card errors (`lora status` counters). |
|
||||
| Q94 | **Receive only:** the Radio Service has no transmit function in M3. It doesn't exist, rather than being unused. |
|
||||
| Q95 | Sniffer defaults: **EU868 LongFast**, 869.525 MHz, BW 250 kHz, SF 11, CR 4/5, sync word 0x2B, preamble 16 (Q19). The other Meshtastic presets are offered, plus custom settings. |
|
||||
| Q95 | Sniffer defaults: **EU868 LongFast**, 869.525 MHz, BW 250 kHz, SF 11, CR 4/5, sync word 0x2B, preamble 16 (Q19). The other Meshtastic presets are offered, plus custom settings. *Later, the default became is the MeshCore preset (869.618 MHz, BW 62.5 kHz, SF 8, CR 4/8, sync word 0x12): it is what is heard here.* |
|
||||
| Q96 | The Sniffer lists packets (time, RSSI, SNR, frequency error, length; hex dump on Enter) **and decodes the Meshtastic header**: the first 16 bytes are never encrypted (destination, sender, packet ID, hop limit and hop start, channel hash, next hop, relay node). Host-tested. Payload decryption is M4. |
|
||||
| Q97 | A Sniffer **Capture** is pcap with **LoRaTap** headers (link type 270), for Wireshark. Started by hand, Status Bar mark, its own Clean-up category, the 90% rule. |
|
||||
| Q98 | **Sweep** steps across the Region's band (863–870 MHz) in 100 kHz steps by default, reading instant RSSI: bars with peak hold, and a waterfall, Wi-Fi Tools style. Optionally CAD on the preset's frequency to tell LoRa traffic from noise. |
|
||||
|
||||
@@ -19,7 +19,8 @@ For a **MeshCore** packet it shows what the packet is, who it concerns and how m
|
||||
|---|---|
|
||||
| `adv Brussels-R1 2h` | A node saying who it is, by its name, heard through 2 repeaters |
|
||||
| `txt a3>7f` | A private message from the node whose key starts with `a3` to the one starting with `7f` (`req`, `rsp` and `path` look the same) |
|
||||
| `chan #11 1h` | A message on a channel; `#11` is the channel's byte, and `11` is the public channel's |
|
||||
| `Alice: hello 1h` | A message on the **public channel**, read: who says they sent it, and the start of what it says |
|
||||
| `chan #5c 1h` | A message on another channel, still encrypted; `#5c` is the channel's byte |
|
||||
| `who's there?` | Someone nearby searching for nodes (repeaters, usually) |
|
||||
| `here 18a6` | A node answering that search; `18a6` starts its key |
|
||||
| `ack`, `anon`, `trace`, `ctl` | An acknowledgement, a login, a trace, other control packets |
|
||||
@@ -27,11 +28,11 @@ For a **MeshCore** packet it shows what the packet is, who it concerns and how m
|
||||
| Key | Does |
|
||||
|---|---|
|
||||
| <kbd>Enter</kbd> | The details of a packet: what is never encrypted (below), and a hex dump |
|
||||
| <kbd>p</kbd> | Picks what to listen to: one of the 7 Meshtastic presets allowed in EU868 (LongFast by default), or **MeshCore** |
|
||||
| <kbd>p</kbd> | Picks what to listen to: **MeshCore** (the default), or one of the 7 Meshtastic presets allowed in EU868 |
|
||||
| <kbd>c</kbd> | Starts or stops a **capture** |
|
||||
| <kbd>Tab</kbd> | Switches to the Sweep |
|
||||
|
||||
The Scanner shows the header and the bytes; it does not decrypt the message itself, which Meshtastic and MeshCore both encrypt.
|
||||
The Scanner shows the header and the bytes. Meshtastic and MeshCore both encrypt the message itself, and the Scanner reads only one kind: what is said on MeshCore's public channel, whose key is published.
|
||||
|
||||
**One network at a time.** The radio listens on one frequency with one setting, and the two networks share neither: on a Meshtastic preset no MeshCore packet is heard, and the other way round.
|
||||
|
||||
@@ -45,7 +46,10 @@ The **MeshCore** preset is the setting its networks use in Europe, "EU/UK (Narro
|
||||
- the path, one repeater a hop, each named by the first byte of its key;
|
||||
- for an **advert**, which is signed and never encrypted: the node's name, its kind (chat node, repeater, room server, sensor), the start of its key, and its position if it gives one;
|
||||
- for a **search** and its **answers**, also in clear: what kind of node is wanted; and in an answer the node's kind, the start of its key, and how well it heard the search;
|
||||
- for a message: the first byte of the sender's and the receiver's keys, or the channel's byte, and how many bytes are encrypted.
|
||||
- for a message on the **public channel**: the name the sender gives, when the sender's clock says it was sent (UTC), and the text;
|
||||
- for any other message: the first byte of the sender's and the receiver's keys, or the channel's byte, and how many bytes are encrypted.
|
||||
|
||||
The public channel is the one every MeshCore node starts with, and its key is the same everywhere, so anyone listening can read it. Private messages and other channels stay encrypted. The sender's name is part of the message and is not signed: anyone can write any name. Letters outside plain ASCII (accents, emoji) show as `?`.
|
||||
|
||||
A byte is all a packet says about who it is from: two nodes can share it. The name comes only with a node's advert, which a node sends now and then, so a quiet network can take a while to show its names.
|
||||
|
||||
|
||||
@@ -9,12 +9,12 @@ tag = "LoRa Scanner"
|
||||
The radio only **listens**: nothing is transmitted. You need the **Cap LoRa-1262** and an **SD card**.
|
||||
|
||||
1. **Open the LoRa Scanner.** The Status Bar shows `L` while the radio listens.
|
||||
2. **Pick a preset with <kbd>p</kbd>.** The Scanner offers the 7 Meshtastic presets allowed in EU868 (LongFast is the default) and MeshCore.
|
||||
2. **Pick a preset with <kbd>p</kbd>.** The Scanner offers MeshCore (the default) and the 7 Meshtastic presets allowed in EU868.
|
||||
3. **Wait for packets.** Each line is a packet: the time, RSSI and SNR, and for a Meshtastic packet the sender, the receiver and the hops. <kbd>Enter</kbd> shows a packet's header and its bytes.
|
||||
4. **Press <kbd>c</kbd> to start a capture.** The Status Bar shows `CAP`. It keeps recording with the App closed.
|
||||
5. **Press <kbd>c</kbd> again to stop.**
|
||||
6. **Get the file.** It is in `/captures/lora/`, a `.pcap` with LoRaTap headers. In the [Storage App](/guide/storage/) you can already look at its packets; on a computer, open it in Wireshark.
|
||||
|
||||
**What you will and will not see.** Meshtastic's header is never encrypted, so who sent a packet and how far it hopped is visible. The message itself is encrypted with the channel's key, and the Scanner does not decrypt it.
|
||||
**What you will and will not see.** Meshtastic's header is never encrypted, so who sent a packet and how far it hopped is visible. The message itself is encrypted with the channel's key, and the Scanner does not decrypt it. MeshCore's public channel is the exception: its key is published, and the Scanner [reads what is said there](/guide/lora-scanner/#meshcore).
|
||||
|
||||
**Hearing nothing is normal** if no node is in range, or if the preset does not match what the nodes nearby use. The [Sweep](/guide/lora-scanner/) (<kbd>Tab</kbd>) shows whether anything is on the air at all across 863 to 870 MHz.
|
||||
|
||||
Reference in New Issue
Block a user