Public Access
The first two MeshCore packets heard were these: a search for repeaters and a repeater answering. Both are in clear; they are the test's bytes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162FokPdvY2KsS4NBfwyWPk
69 lines
4.4 KiB
Markdown
69 lines
4.4 KiB
Markdown
+++
|
|
title = "LoRa Scanner"
|
|
description = "Listen to the radio: every packet it hears, a survey of signal strength from 863 to 870 MHz, and captures for Wireshark. It only listens."
|
|
weight = 2
|
|
[extra]
|
|
tag = "LoRa Scanner"
|
|
screens = ["sniffer.png", "sweep.png"]
|
|
+++
|
|
|
|
The Scanner uses the **Cap LoRa-1262**. It **never transmits**: it listens and shows.
|
|
|
|
## Sniffer
|
|
|
|
The first view lists what the radio hears, newest first: the time, the RSSI (signal strength, in dBm) and the SNR (signal over noise, in dB). For a **Meshtastic** packet it also shows the sender and the receiver (the last four hex digits of their numbers) and the number of hops.
|
|
|
|
For a **MeshCore** packet it shows what the packet is, who it concerns and how many repeaters are in its path:
|
|
|
|
| Row | Is |
|
|
|---|---|
|
|
| `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 |
|
|
| `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 |
|
|
|
|
| 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>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.
|
|
|
|
**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.
|
|
|
|
### MeshCore
|
|
|
|
The **MeshCore** preset is the setting its networks use in Europe, "EU/UK (Narrow)": 869.618 MHz, 62.5 kHz wide, SF8, coding rate 4/8. A network set up differently needs `lora custom` in the [Shell](/guide/shell/).
|
|
|
|
<kbd>Enter</kbd> on a MeshCore packet shows:
|
|
|
|
- what it is and how it travels: **flood** (every repeater passes it on, and adds itself to the path) or **direct** (it carries the route to follow);
|
|
- 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.
|
|
|
|
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.
|
|
|
|
## Capture
|
|
|
|
A capture records packets into a **pcap** file with LoRaTap headers in `/captures/lora/` on the SD card, to open in Wireshark. It keeps recording with the App closed (the Status Bar shows `CAP`); the radio sleeps when the App is not open and no capture is running. Captures are never deleted unless you ask, in the [Storage App](/guide/storage/), which can also show a pcap's packets on the device.
|
|
|
|
## Sweep
|
|
|
|
<kbd>Tab</kbd> switches to the Sweep: the signal strength across **863 to 870 MHz** in 100 kHz steps, drawn as bars with a mark at each peak, and a waterfall under them. The frequency the Sniffer listens on is marked. The Sniffer is paused during a Sweep and picks up where it was. The Status Bar shows `SW`.
|
|
|
|
## The GNSS receiver raises the noise
|
|
|
|
The GNSS receiver on the same Cap makes the radio's noise floor about **8 dB** worse while it runs. **Settings → Pause GNSS for LoRa** (off by default) puts the receiver on standby while the radio listens, except while a Track is being recorded.
|
|
|
|
## The keys, as the device lists them
|
|
|
|
What <kbd>Fn</kbd> + <kbd>h</kbd> shows on these screens. These tables are generated from the firmware's own lists, so they are always the current ones.
|
|
|
|
{{ keys(scopes=["lora", "lora-packet", "lora-presets", "lora-sweep"]) }}
|