DOCUMENTATION / PART 2 — GETTING IT RUNNING2.3

2.3 The first hour

This is one session, in order, from nothing to a case that contains evidence. Every command below is real; substitute your own frequencies, PLMN and paths. The example uses a GSM survey with a synthetic GSMTAP source, so it can be followed on a machine with no radio at all.

Step 1 — declare the case before touching a radio

python3 tools/casebook.py status
python3 tools/casebook.py case-create "site-a" "two macro cells, 900 and 1800" \
        "written authorisation, ticket 1234"

The case has a name, a scope and an authorisation note. The casebook asks for the last two because a capture without a stated basis is a file that gets deleted the first time somebody asks a lawyer about it, and because scope is what tells a later reader which of your rows are inside the experiment.

Step 2 — check the bench

modules/00_deps.sh --preflight
modules/05_field_kit.sh --capability

Nothing else happens until this is clean. If --preflight says the capture path is unusable, fix it now; if --capability says receive only, plan a passive session rather than discovering the limitation halfway through an attack.

Step 3 — choose and check the radio

modules/01_radio.sh --list-tsv
modules/01_radio.sh --select 0
modules/01_radio.sh --caps-tsv
modules/01_radio.sh --band-check 942

--band-check answers whether the device you selected can actually reach the frequency you intend to work on, including the antenna and amplifier question that a bare frequency range hides.

Step 4 — survey

modules/02_cell_recon.sh --scan gsm
modules/02_cell_recon.sh --list

The survey writes loot/cell_recon/cells.tsv:

rat  gen  arfcn  freq_mhz  plmn  mcc  mnc  operator  country
cell_id  tac_lac  band  rsrp_dbm  cipher  source  ts

Read the source column. A row that came out of a live scan and a row decoded out of somebody else's capture are both useful and are not the same evidence.

Step 5 — declare the target

modules/02_cell_recon.sh --set-target GSM 42 26201
python3 tools/casebook.py target-set GSM 26201 42 0A1B

Two commands, one meaning, two consumers. 02_cell_recon --set-target writes the shared radio target that modules read before they decode. The casebook's target-set writes the target into the case, which is what the GUI's target panel and the reports read. Keeping them in step is the operator's job, and the GUI shows both so a mismatch is visible rather than silent.

Step 6 — watch the air

modules/03_gsmtap.sh --listen 30
modules/03_gsmtap.sh --read captures/gsmtap-*.pcap
modules/03_gsmtap.sh --identities-tsv

--listen captures UDP 4729 into a pcap for the given number of seconds. Any GSMTAP source can feed it: this toolkit's field kit, gr-gsm, srsRAN, Open5GS, a node over the network. --read decodes a pcap into loot/gsmtap/decoded.tsv, and --identities-tsv prints the identities that crossed the air in the clear — which, on a 2G network with no cipher, is all of them.

Step 7 — read what you wrote, then close the loop

ls loot/cell_recon loot/gsmtap
python3 tools/casebook.py captures
python3 tools/casebook.py evidence-add loot/gsmtap/decoded.tsv 03_gsmtap observation
python3 tools/casebook.py report-html

evidence-add takes a file, a module tag, free tags and a sensitivity marker, so the case records where the file came from and how it should be handled. report-html renders the case — target, evidence, timeline, alerts — into one document. At this point the first hour is over and you have: a scoped case, a survey store, a decoded capture, an evidence index and a report, all of which are files you can hand to somebody else.


Part 2 has covered the bench, the radio and a session end to end. Part 3 describes the interfaces those same commands are exposed through — the CLI in more detail, then the TUI, then the GUI — and the gate suite that keeps the whole structure from drifting.