A set of tools to parse Iridium frames
Clone or download
Failed to load latest commit information.
9601 chore(tpi): Rename dpi.py to tpi.py Dec 28, 2015
ambe_emu Acknowledge vanished firmware image Jun 28, 2017
extractor-python doc(readme): Move left over extractor parts to own readme Apr 19, 2016
nal-shout feat(nal-shout): NAL shout version 6 decoder Nov 6, 2016
rtl-sdr chore(tools): Set of random rtl-sdr related scripts Oct 4, 2015
tools Add support for new filenams/type Jan 18, 2015
tracking Script to plot changes in TLEs over time Feb 6, 2017
.gitignore ignore more files May 29, 2016
IDA-GSM.txt beautify txt file Apr 24, 2017
README.md fix documentation and suggest -p Jun 28, 2017
bch-generate.py tool to generate BCH polys. Just for peace of mind Oct 15, 2014
bch.py Make BCH handling more understandable May 7, 2015
beam-plotter.py FEAT(beam-plotter) support --direction Mar 16, 2018
bits_to_dfs.py bits_to_dfs.py: parse new output format May 29, 2016
bitutils.py fix(bitutils): More robust parsing Apr 3, 2015
check-sample feat(voc): Add check-sample script Dec 2, 2017
crc.py Classifiy some LCW=0 non-voice data May 26, 2016
data.vimrc additional vim features Jun 19, 2016
fec.py refactor fec() into module Oct 5, 2014
iridium-parser.py support for swapped symbols on input Mar 16, 2018
iridium.txt some more cleanup Dec 27, 2014
mkkml Enforce sat numbers to three digits Mar 16, 2018
play-iridium-ambe fix(voc-stats): Add missing script and some usage info Jan 29, 2016
reassembler.py Fix fractional seconds in pcap output Dec 3, 2017
reedsolo.py Parse "VOD", new, reed-solomon protected Frames May 26, 2016
reedsolo6.py fix(iridium-parser): Add missing reedsolo6.py Jul 16, 2016
rs.py clarify reed-solomon Jun 19, 2016
rs6.py LCW3 contains 6bit reed-solomon Jul 13, 2016
rx-stats-freq-hist.py feat(tools): more stats Sep 30, 2015
rx-stats-len-hist.py feat(tools): more stats Sep 30, 2015
rx-stats.py fix another tiny logic bug Mar 16, 2018
stats-parsed fix wrong text in stats-parsed Apr 24, 2017
stats-voc.py FEAT(stats-voc) also plot quality Mar 16, 2018
stats.py feat(stats): New frame types and coloring scheme Jul 17, 2016
voc-cluster.py feat(voc-cluster): Also write the failed samples Dec 2, 2017


Simple toolkit to decode Iridium signals


  • Python (2.7)
  • NumPy (scipy)


Unless otherwise noted in a file, everything here is (c) Sec & schneider and licensed under the 2-Clause BSD License

Example usage

Either extract some Iridium frames from the air or a file using gr-iridium (recommended) or use the legacy code located in the extractror-python directory if you don't want to install GNURadio (not recommended).

It is assumed that the output of the extractor has been written to output.bits. Iridium frames can be decoded with

python2 iridium-parser.py -p output.bits

if you want to speed up that step you can install pypy and instead run

pypy iridium-parser.py -p output.bits

Frame extraction

See gr-iridium (recommended) or extractor-python (not recommended) on how to extract Iridium frames from raw data.

Voice Decoding

To listen to voice calls, you will need an AMBE decoder. There are two option:

The easier option is to use tnt's AMBE decoder. You can use the extracted decoder if you want to create bit correct output. There almost no audible difference between the two options. Make sure that either ir77_ambe_decode or ambe is in your PATH. Also select the installed one in play-iridium-ambe.

Make sure that the main folder of the toolkit is in your PATH variable: export PATH=$PATH:<this directory>

Steps to decode voice:

  • Decode your captured and demodulated bits using iridium-parser and put the result into a file: pypy iridium-parser.py output.bits > output.parsed
  • Use stats-voc.py to see streams of captured voice frames: ./stats-voc.py output.parsed
  • Click once left and once right to select an area. stats-voc.py will try do decode and play the selected samples using the play-iridium-ambe script.

Frame Format

Partial documentation: http://wiki.muc.ccc.de/iridium:toolkit#frame_format

Main Components



Takes the demodulated bits and tries to parse them into a readable format.

Supports some different output formats (-o option).



Converts IRA frames to a kml file to be viewed in google earth.

Run as grep ^IRA output.parsed |perl mkkml tracks > output.kml to display satellite tracks

Run as grep ^IRA output.parsed |perl mkkml heatmap > output.kml to create a heatmap of sat positions and downlink positions



Takes the parsed bits (from iridium-parser.py) and reassembles them into higher level protocols.

Supports different modes with the -m option.

Usage: (it is assumed that the output from iridium-parser is in output.parsed)

reassembler.py -i output.parsed -m <mode>

Supported modes are currently:

  • ida - outputs Um Layer 3 messages as hex
  • lap - GSM-compatible L3 messages as GSMtap compatible .pcap
  • page - paging requests (Ring Alert Channel)
  • msg - Pager messages