Coder Social home page Coder Social logo

iridium-toolkit's Introduction

Simple toolkit to decode Iridium signals

Requisites

  • Python (3.7+) (may work with older 3.x, but this is untested)
  • NumPy (scipy)
  • crcmod

License

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

python3 iridium-parser.py -p output.bits

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

pypy3 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

Parser

iridium-parser.py

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

Usage: (it is assumed that the output from gr-iridium is in output.bits)

iridium-parser.py [-p] [--harder] output.bits > output.parsed

Some Options:

  • -p - Only output frames parsed without errors (and error-correction)
  • --harder - Try extra hard to decode with the use of error-correction (very slow)
  • --uw-ec - Try to parse lines with errors inside iridium unique word (also slow)
  • --filter <classname> - Only decode frames of that class (e.g. IridiumRAMessage, IridiumBCMessage, etc.) (fast)

mkkml

mkkml

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

Reassembler

reassembler.py

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
  • idapp - same as above with some light parsing/pretty-printing
  • lap - GSM-compatible L3 messages as GSMtap compatible .pcap
  • page - paging requests (Ring Alert Channel)
  • msg - Pager messages
  • sbd - Short Burst Data messages
  • acars - parsed ACARS SBD messages
  • ppm - estimation of receiving SDRs PPM frequency offset

iridium-toolkit's People

Contributors

alphafox02 avatar arirubinstein avatar haakov avatar kevinelliott avatar murrayma avatar schneider42 avatar sec42 avatar yggi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iridium-toolkit's Issues

Track KML altitudeMode is set in the wrong place

The line setting altitudeMode for KML tracks here https://github.com/muccc/iridium-toolkit/blob/master/mkkml#L262 should actually be within gx:Track and moved before Line 265. As-is, google earth will load the tracks with altitudeMode clampToGround (default).

I am not an expert in KML, just implementing the fix from the google group here; it is possible it must to be in both locations but at least for Google Earth it loads correctly with it set only within gx:Track.

I'll submit a PR when I get a chance; for now I wanted to document this.

error in iridium-parser.py

hello

I have this error with iridium-parser.py 👍

print("WARN: no sigmf-meta source file. Using (probably-wrong) hardcoded defaults", file=sys.stderr)

I tried Gnuradio 3.7 , gnuradio 3.8 (dragon_os focal 21)
I tried previous working outputs.bis
I tried pypy pypy3 python3

same problem

Any idea /thanks

ValueError: math domain error

When I am trying to parse output.bits using iridium-parser.py, I am getting following error after few frames.
`Traceback (most recent call last):
File "iridium-parser.py", line 1774, in
do_input(input)
File "iridium-parser.py", line 1691, in do_input
perline(Message(line.strip()).upgrade())
File "iridium-parser.py", line 228, in init
self.leveldb=20*log(self.level,10)
ValueError: math domain error

`
Anyone else also facing the same problem??

Audio problems

Hi,
I use the stats-voc in order to listen to iridium.
It seems to be working inside the terminal, it shows the audio time running, but I can’t hear the sound.
Do you have idea what can cause that?

thanks

Live decoding?

I'd like to get a live stream of sbd messages into Node-RED via a UDP stream.
To try and achieve this, here is what I am testing:
iridium-extractor -D 4 rtl-sdr.conf | iridium-parser.py -p | reassember.py -m sbd | udp-for-il.py
I see good %, from the extractor but no messages.
Am I on the right track to pipe each application like that?
If not, how can I get the 3 programs to work in a chain?

Thanks.

What are frame headings stand for ?

There are several headers 'IBC', 'IDA', 'IIP', 'IIQ', 'IIR', 'IIU', 'IMS', 'IRA', 'IRI', 'ISY', 'ITL', 'IU3', 'I36', 'I38', 'MSG', 'VDA', 'VO6', 'VOC', 'VOD', 'MS3' what do these headers mean?

I know that IRA stands for ring alert but ı couldn't find any information about other headers.

dr. Help

Hi muccc,
I look at the bits using your toolkit and I can't understand how the bits after the parser convert the bits to HEX values ​​to get VOC data, tell me which way to look, I open the raw data and processed by your parser, but I don't see how they were converted, help me with this.

RAW
RAW_1

VOC
VOC

NameError: global name 'uwec' is not defined

On a new install I have just made, I got 'NameError: global name 'uwec' is not defined' when running iridium-parser.py . The full message is

jem@jem-Big-One:~/Dev/iridium-toolkit$ python iridium-parser.py output20.bits > output20.parsed
Traceback (most recent call last):
File "iridium-parser.py", line 1606, in
do_input(input)
File "iridium-parser.py", line 1520, in do_input
perline(Message(line.strip()).upgrade())
File "iridium-parser.py", line 1589, in perline
print(q.pretty()+" ERR:"+", ".join(q.error_msg))
File "iridium-parser.py", line 302, in pretty
str= "RAW: "+self._pretty_header()
File "iridium-parser.py", line 275, in _pretty_header
if uwec:
NameError: global name 'uwec' is not defined

I had to add
uwec = False
to the declarations that start at line 56 to fix it.
I guess whatever the previous version of Python I had just magically ignored it was missing ... I've been using it for weeks on the previous install.

Cheers,

Jem.

Need files

Hello, could you make notes voc.bits output.dfs, if does not make it difficult for you, I do not have receiving equipment, but it is interesting to understand the structure of these records

Pager Message Encrypted?

Hi, I am using gr-iridium to detect the iridium signals and decoding the messages with iridium-toolkit. Regarding the pager message, most of them look like this
5AFsISa5ywcAkFZxjrkd3pZCqDbz4DG*zTGE*N5+aKCmtPDJNBEVm5*x00WM
Does this mean they have been encrypted? If it is not, I am wondering do we have any methods to decode them into readable words?

FYI, I do saw a few (1%) of the pager message readable, and they look like this: [email protected] Test message sent from SNOC-CRON -> [email protected] on Sun Jan 17 12:15:02 GMT 2021

Thanks in advance.

--interesting breaks with some message types

On the parsing side, I'm also experimenting with --interesting and getting this error

  File "/home/user/iridium-toolkit/iridium-parser.py", line 407, in <module>
    do_input(input)
  File "/home/user/iridium-toolkit/iridium-parser.py", line 291, in do_input
    perline(bitsparser.Message(line.strip()).upgrade())
  File "/home/user/iridium-toolkit/iridium-parser.py", line 361, in perline
    print(q.pretty())
  File "/home/user/iridium-toolkit/bitsparser.py", line 1009, in pretty
    s+= " ["+" ".join(["%s"%x for x in self.descrambled])+"]"
AttributeError: 'IridiumIPMessage' object has no attribute 'descrambled'

this happens with a few other message types. if the line here is changed to this:
if type(q).__name__ == "IridiumMessage" or type(q).__name__ == "IridiumECCMessage" or type(q).__name__ == "IridiumBCMessage" or type(q).__name__ == "Message" or type(q).__name__ == "IridiumSYMessage" or type(q).__name__ == "IridiumMSMessage" or type(q).__name__ == "IridiumIPMessage" or type(q).__name__ == "IridiumLCWMessage" or type(q).__name__ == "IridiumLCW3Message" or q.error:

It doesn't give anymore errors for my particular file. Is that the correct change?

Can you elaborate on what --interesting is doing? I'm going through the source now and re-watching the HOPE talk. just want to get a feel for it's relevance.

reassembler page mode error

When reassembler.py is called with the mode specified as page, we receive the following error. We are able to extract the contents for the other modes and voice. This was run on Ubuntu 18.04 with the most recent code in master.

$ ./reassembler.py -i ../output.parsed -m page
Traceback (most recent call last):
File "./reassembler.py", line 458, in
zx.run(fileinput.input(ifile))
File "./reassembler.py", line 86, in run
zz=self.process(res)
File "./reassembler.py", line 344, in process
return ["%02d %02d %s %s %03d : %s %s"%(q.sat,q.beam,q.posx,q.posy,q.alt,x[0],x[1])]
AttributeError: 'MyObject' object has no attribute 'posx'

bch time

the bch message brings the time( it seems like the frame_id), does it mean the time the sv build the bch frame?

Error while creating kml file

I am trying to convert IRA frames to a kml file to be viewed in google earth using following commands:
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

But I'm getting errors and kml file is not getting created. I am getting following error when using heatmap command:
Couldn't parse: IRA: p-1642567800 010218310.0000 1626250624 96% 0.002 098 DL sat:071 beam:39 xyz=(+0293,+1239,+0957) pos=(+36.93/+076.70) alt=015 RAI:48 ?00 bc_sb:07 Couldn't parse: IRA: p-1642567800 010221366.0000 1626317440 97% 0.002 119 DL sat:067 beam:27 xyz=(+0475,+1632,+0558) pos=(+18.17/+073.77) alt=800 RAI:48 ?10 bc_sb:29 FILL=1 Couldn't parse: IRA: p-1642567800 010225686.0000 1626317312 98% 0.002 096 DL sat:067 beam:27 xyz=(+0309,+1328,+0824) pos=(+31.15/+076.90) alt=017 RAI:48 ?10 bc_sb:29 Couldn't parse: IRA: p-1642567800 010229735.0000 1626317056 94% 0.002 095 DL sat:067 beam:28 xyz=(+0474,+1627,+0573) pos=(+18.68/+073.76) alt=800 RAI:48 ?00 bc_sb:19 Couldn't parse: IRA: p-1642567800 010230006.0000 1626316928 100% 0.003 093 DL sat:067 beam:27 xyz=(+0474,+1627,+0574) pos=(+18.71/+073.76) alt=801 RAI:48 ?10 bc_sb:29 Down maxval: 0.000 Use of uninitialized value $sc in numeric gt (>) at mkkml line 225. Up maxval: 0.000 Use of uninitialized value $sc in numeric gt (>) at mkkml line 225.
I am getting following error when using mkkml tracks command:
Couldn't parse: IRA: p-1642567800 010216775.0000 1626317824 87% 0.001 096 DL sat:067 beam:28 xyz=(+0311,+1426,+0640) pos=(+23.68/+077.70) alt=019 RAI:48 ?00 bc_sb:19 INCOMPLETE Couldn't parse: IRA: p-1642567800 010217046.0000 1626317824 98% 0.003 095 DL sat:067 beam:27 xyz=(+0311,+1335,+0812) pos=(+30.64/+076.89) alt=017 RAI:48 ?10 bc_sb:29 Couldn't parse: IRA: p-1642567800 010218310.0000 1626250624 96% 0.002 098 DL sat:071 beam:39 xyz=(+0293,+1239,+0957) pos=(+36.93/+076.70) alt=015 RAI:48 ?00 bc_sb:07 Couldn't parse: IRA: p-1642567800 010221366.0000 1626317440 97% 0.002 119 DL sat:067 beam:27 xyz=(+0475,+1632,+0558) pos=(+18.17/+073.77) alt=800 RAI:48 ?10 bc_sb:29 FILL=1 Couldn't parse: IRA: p-1642567800 010225686.0000 1626317312 98% 0.002 096 DL sat:067 beam:27 xyz=(+0309,+1328,+0824) pos=(+31.15/+076.90) alt=017 RAI:48 ?10 bc_sb:29 Couldn't parse: IRA: p-1642567800 010229735.0000 1626317056 94% 0.002 095 DL sat:067 beam:28 xyz=(+0474,+1627,+0573) pos=(+18.68/+073.76) alt=800 RAI:48 ?00 bc_sb:19 Couldn't parse: IRA: p-1642567800 010230006.0000 1626316928 100% 0.003 093 DL sat:067 beam:27 xyz=(+0474,+1627,+0574) pos=(+18.71/+073.76) alt=801 RAI:48 ?10 bc_sb:29

9601 reversing

Are you still working on 9601 firmware reverse engineering? Are you interested in in knowledge sharing on this issue?

WBR,
Igor

dtoa & dfoa

in the bch downlink assignment and lcw messages, what's the unit of dtoa/dfoa/f_dtoa/f_dfoa, is that dtoa in milliseconds or something other? and is that dfoa in Hz or others? but at the same time, the doppler frequency would be negative or positive.

thanks

Wrong length in reassembler.py, line 1315?

In reassembler.py, line 1315 (current version), it reads:

if len(data)<12:

I am not a Python programmer, but it looks to me like this should read:

if len(data)<13:

Otherwise, a true length of 12 means line 1330 (data=data[12:]) returns an empty string and line 1333 (if data[-1] == 0x03:) results in a "index out of range" error.

I welcome any feedback if my understanding is incorrect.

Can’t decode audio

Hi,
I’m using Ubuntu 20.04 and GNURadio 3.8.
I recorded some information using gr-iridium and parsed it using iridium parser.
When I present the data with the command,
Python ./stats-voc.py output.parsed
I get a plot with a lot of red dots.
But when I try to hear the information (click on the left side and then the right side of the dots) I can’t hear anything.
I installed the ir77_ambe and ran make, and moved the ir77_ambe_decode to the iridium toolkit folder from which I run the stats_voc command.

When I click on the dots I just get its coordinates printed on the terminal, nothing else.

Do you have any idea how to solve this issue?

thanks!

live parsing

If there any option to carryout online/live parsing of output bits (using iridium toolkit) produced by iridium-extractor to get voice/sms in real time. Presently, first you have to write output bits into file and then parse that file using iridium-parser and then extract voice. Anyone who has worked on solution to provide realtime parsing?

Information about iridium frames

Hi!
I’m trying to find some information about the iridium frames and more specifically on all the tones and unique words.
I’ve seen some in the wiki.muc.ccc but it’s very partial.
Can you help me with that?

iridium-parser.py errors in latest update.

Hi,
Having problems with the new parser. Seems to be adding decimal numbers that are messing up the reassembler and stats-voc programs.

Here's a comparison of the parsed output from the old and new versions:

OUTPUT.PARSED - Old version:

IDA: i-1595724308-t1 000000844 1624457600 97% 0.000 179 DL LCW(2,T:maint,C:syncstatus:1,dtoa:1022,dfoa:255,786175 E0) 000 cont=0 0 ctr=000 000 len=00 0:0000 [87.3a.09.b7.30.a7.d8.0b.79.d0.c2.f2.35.fc.00.6f.c0.07.fc.00.00.00.00] --- 0000
IBC: i-1595724308-t1 000000846 1624540928 96% 0.000 136 DL bc:0 sat:02 cell:28 0 ts:1 sv_blkn:0 aq_cl:1111111111111111 aq_sb:26 aq_ch:2 00 0000 time:2020-07-26T00:45:11Z 101 11110101 ts:2 ul_sb:02 dl_sb:00 000 dtoa:000 dfoa:00 00

OUTPUT.PARSED - New version: note the 000000844**.000**

IDA: i-1595724308-t1 000000844.000 1624457600 97% 0.000 179 DL LCW(2,T:maint,C:sync[status:1,dtoa:1022,dfoa:255],0|0 E0) 000 cont=0 0 ctr=000 000 len=00 0:0000 [87.3a.09.b7.30.a7.d8.0b.79.d0.c2.f2.35.fc.00.6f.c0.07.fc.00.00.00.00] --- 0000
IBC: i-1595724308-t1 000000846.000 1624540928 96% 0.000 136 DL bc:0 sat:002 cell:28 0 slot:1 sv_blkn:0 aq_cl:1111111111111111 aq_sb:26 aq_ch:2 00 0000 time:2020-07-26T00:45:11.65Z 101 Rid:245 ts:3 ul_sb:02 dl_sb:00 access:1 dtoa:000 dfoa:00 00 descr_extra:0000011001

Running stats-voc gives:

~/Dev/iridium-toolkit$ python stats-voc.py output.parsed
Traceback (most recent call last):
File "stats-voc.py", line 97, in
main()
File "stats-voc.py", line 76, in main
tsl, fl, quals, _ = filter_voc()
File "stats-voc.py", line 27, in filter_voc
ts = ts_base + int(line_split[2])/1000.
ValueError: invalid literal for int() with base 10: '000001105.000'

Re assembler gives:

sudo ./reassembler.py -i output.parsed -m msg
Couldn't parse input line: IDA: i-1595724308-t1 000000844.000 1624457600 97% 0.000 179 DL LCW(2,T:maint,C:sync[status:1,dtoa:1022,dfoa:255],0|0 E0) 000 cont=0 0 ctr=000 000 len=00 0:0000 [87.3a.09.b7.30.a7.d8.0b.79.d0.c2.f2.35.fc.00.6f.c0.07.fc.00.00.00.00] --- 0000

I'm running:

Description: Ubuntu 18.04.4 LTS

~/Dev/iridium-toolkit$ python
Python 2.7.17 (default, Jul 20 2020, 15:37:01)
[GCC 7.5.0] on linux2

Thanks!!

reassembler.py No Attribute 'signal'

Hi,

Running into an issue with reassembler.py where I'm getting an...
AttributeError: 'MyObject' object has no attribute 'signal'
on line 114. I didn't see any other references for signal in the MyObject class or in reassembler.py so I'm not quite sure where this value is being pulled from.

Thanks!

Information contained when running reassembler using page and msg mode

I am running reassembler.py in paging requests (Ring Alert Channel) mode using -m page :
python3 reassembler.py -i output.parsed -m page
I am getting following output:
'109 22 18.01 59.27 798 : 109f0b0c 02
085 22 21.96 67.98 018 : 109f104c 02
085 22 24.46 68.19 020 : 0d011548 11
085 23 18.51 57.27 800 : 0d011548 11
085 23 26.66 70.00 018 : 836951fc 21
085 36 34.00 57.39 798 : 0ca66178 05
065 03 27.14 71.88 020 : 836951fc 21
087 23 20.31 54.93 800 : 109f104c 02
029 12 27.95 76.69 019 : 0ca66178 05
068 20 14.87 82.96 800 : 02a27760 05
048 26 7.97 78.38 803 : 0ca1eb7b 05
071 26 18.59 75.90 019 : 101ad054 02
071 26 27.35 75.81 018 : 0d011548 05
071 27 18.27 76.07 801 : 0cf48243 05
071 26 32.42 75.88 016 : 0cf48243 05`

Similarly when I am running command using pager msg mode:
python3 reassembler.py -i output.parsed -m msg
I am getting following output:
'Message 3526523 0033 @2022-03-26T00:03:56 (len:0) 36 OK : ZQBBByadKafpvI7W9gtCjKFEOdWA8L2+giAJZCo+pioyxKEC8s36qzhYZkM
Message 3526550 0029 @2022-03-26T00:07:06 (len:0) 44 OK : aABBESZZbqdtd
S5cleQptXkiN2D3D67TtsOVC9bKJZpag+z8evSVG9HvKGM
Message 3526577 0044 @2022-03-26T00:07:10 (len:0) 95 OK : aABBDyagBIIu4idJ+hb+rarUgYevPqeuo4rdGBTBfDu3hAGlewzjR6vE
Message 3526514 0047 @2022-03-26T00:07:10 (len:0) 0 OK : ZQBBFCaQvdZG8GfQYWPEpZ1rOqOcxJ3LOuZQjGZodx94HOn2kp1R8qopO2nA
Message 3526523 0035 @2022-03-26T00:07:10 (len:0) 93 OK : ZQBBFyawQ5SyNx
m1afpg
A8crBQjNEGvi+LUv8W3POpmdomfoKU9FGuDco
Message 3526892 0057 @2022-03-26T00:07:14 (len:0) 61 OK : ZQBBESYcNaC5IjEC3
bL7r4kW47iRZj**mqc8ZaPRgKrEvsCVY85sDWduHpO
Message 3526568 0012 @2022-03-26T00:07:14 (len:0) 76 OK : aABBFiawKRZ0ZZLx6BVSkDaf47FpakQYUjS0kKfg07a8F2ZwkyAPhMwREs5K
Message 3526577 0045 @2022-03-26T00:07:14 (len:0) 90 OK : aABBFyavDufqbdRw77I3plQNvaX*tmtE6nOcOa6mLXwbEMdXZekBiBvf9BFJ
Message 3526566 0016 @2022-03-26T00:09:33 (len:0) 21 OK : aABBFCZZjhnaiav8RLISblmKXV69j2SIdpR51IfTWsLzCZNJIHrs6cRYde+W`

I am not able to understand information contained in the output? Can someone explain what these values mean? Also what is significance of these values?

ModuleNotFoundError: No module named 'crcmod'

Hi, I try to run new "acars" mode but I get error ModuleNotFoundError: No module named 'crcmod', I check all folder but this module 'crcmod' does not exist, where can i get this module

IIP+IIQ+IIU

Good day. Have you figured out a frame merge mechanism to get a full IP,
аnd how to unite on the counter?

Non ascii characters in SBD mode

reassembler.py in 'sbd' mode decodes ASCII characters to corresponding characters and rest are encoded as hex. This makes most of SBD data as garbled with no meaning. The code snippet from utils.py which converts int values to corresponding ASCII characters is as follows:
if( c>=32 and c<127): str1+=chr(c)
I investigated these hex values and found that they belong to other languages like arabic/french.
str = str.replace(r'\x{e2}\x{80}\x{99}',"'") str = str.replace(r'\x{e2}\x{80}\x{a6}',"…") str = str.replace(r'\x{f4}',"ô") str = str.replace(r'\x{c0}','À') str = str.replace(r'\x{c7}',"Ç") str = str.replace(r'\x{ea}',"ê") str = str.replace(r'\x{f9}',"ù") str = str.replace(r'\x{80}',"€") str = str.replace(r'\x{20}\x{A3}',"₣") str = str.replace(r'\x{c2}',"Â") str = str.replace(r'\x{e8}',"è") str = str.replace(r'\x{c9}',"É") str = str.replace(r'\x{ca}',"Ê")
How can we modify this code to view non ascii characters (french or arabic language). I tried to replace these non ascii hex values to corresponding characters but it is very time consuming. Is there any efficient way to convert these non ascii values to corresponding non english characters?

'SBDObject' object has no attribute 'timestamp'

I pulled down last night's version of gr-iridium (3.8 branch) and iridium toolkit. I'm working on updating DragonOS Focal (20.04 based w/ python 3.8.10) and learning about the new acars feature. When I run the iridium extractor with this line,

iridium-extractor -D 4 --multi-frame /usr/src/gr-iridium/examples/rtl-sdr-soapy.conf | python3 -u /usr/src/iridium-toolkit/iridium-parser.py -o zmq

And the toolkit in a second terminal like this,

python3 -u /usr/src/iridium-toolkit/reassembler.py -m acars zmq:

The second terminal eventually ends up like this,

Traceback (most recent call last):
File "/usr/src/iridium-toolkit/reassembler.py", line 1856, in
zx.run(iter(socket.recv_string,""))
File "/usr/src/iridium-toolkit/reassembler.py", line 205, in run
self.consume(mo)
File "/usr/src/iridium-toolkit/reassembler.py", line 1104, in consume
self.consume_l2(zz)
File "/usr/src/iridium-toolkit/reassembler.py", line 1366, in consume_l2
out += q.timestamp + " "
AttributeError: 'SBDObject' object has no attribute 'timestamp'

I've not seen any acars messages and sometimes the timestamp traceback happens shortly after l launch and other times it'll run for awhile before having the issue.

improve reassembler for broken input

The reassambler dies on unparseable input lines. It should output the offending line and possibly just carry on with the rest of the input.

Example error:
pypy reassembler.py -i iridium-packets.txt -m lap
Traceback (most recent call last):
File "reassembler.py", line 395, in
zx.run(fileinput.input(ifile))
File "reassembler.py", line 81, in run
res=self.filter(line)
File "reassembler.py", line 104, in filter
q=super(ReassembleIDA,self).filter(line)
File "reassembler.py", line 92, in filter
q.typ,q.name,q.time,q.frequency,q.confidence,q.level,q.symbols,q.uldl,q.data=line.split(None,8)
ValueError: expected length 9, got 7

string index out of range at self.msg_zero2=rest[0]

Traceback (most recent call last):
  File "../iridium-toolkit/iridium-parser.py", line 1233, in <module>
    do_input(input)
  File "../iridium-toolkit/iridium-parser.py", line 1177, in do_input
    perline(Message(line.strip()).upgrade())
  File "../iridium-toolkit/iridium-parser.py", line 160, in upgrade
    return IridiumMessage(self).upgrade()
  File "../iridium-toolkit/iridium-parser.py", line 404, in upgrade
    return IridiumECCMessage(self).upgrade()
  File "../iridium-toolkit/iridium-parser.py", line 612, in upgrade
    return IridiumMSMessage(self).upgrade()
  File "../iridium-toolkit/iridium-parser.py", line 986, in upgrade
    return IridiumMessagingAscii(self).upgrade()
  File "../iridium-toolkit/iridium-parser.py", line 1042, in __init__
    self.msg_zero2=rest[0]
IndexError: string index out of range

Identifying parties during a call

hello,

When exporting a pcap file (using the reassembler with the lap option), I've managed to identify one of the two parties in a phone call under the "Calling Party BCD Number" or the "Called Party BCD Number" entry. But I'm scratching my head on how can I identify the counterpart of the same call.

Not sure if it's something by design from the iridium network or I'm missing something elsewhere.

Kind regards,
Charlez.

Get IRA packets

How long is the launch cycle of iridium's IRA packets? Why can I only receive IMS packets for a long time

Iridium link #3 idea

In your presentation at The Eleventh Hope you mentioned that it was 6 bit frames with a checksum. Have you tried running the data through a base64 decoder?

NameError: name 'elf' is not defined

Wasn’t sure if updating a previous ticket would be noticed, so here’s a separate entry. After running the -m option for awhile I encounter this after receiving about a dozen messages,

Traceback (most recent call last):
File "/usr/src/iridium-toolkit/reassembler.py", line 1862, in
zx.run(iter(socket.recv_string,""))
File "/usr/src/iridium-toolkit/reassembler.py", line 205, in run
self.consume(mo)
File "/usr/src/iridium-toolkit/reassembler.py", line 1104, in consume
self.consume_l2(zz)
File "/usr/src/iridium-toolkit/reassembler.py", line 1415, in consume_l2
out+="SEQ: %s, FNO: %s"%(ascii(elf.seqn, escape=True), ascii(q.f_no, escape=True))
NameError: name 'elf' is not defined

Position of IRA

Output of IRA signals pos=(+49.51/+029.99) (I assume it is in decimal degrees, please tell me if not).
The position information is printed with only two decimals after '.' . Is it rounded in the software? I wonder how many decmals possible to reach? Is it possible to get 5 decimal aftter '.' ?

iridium-parser : TypeError: argument 1 must be string or read-only buffer, not list

On a new install, I'm getting :

jem@jem-VBMINT18 ~/Dev/iridium-toolkit $ python iridium-parser.py ../../iridium/output-err.bits > ../../iridium/output-err.parsed
Traceback (most recent call last):
File "iridium-parser.py", line 1602, in
do_input(input)
File "iridium-parser.py", line 1516, in do_input
perline(Message(line.strip()).upgrade())
File "iridium-parser.py", line 268, in upgrade
return IridiumMessage(self).upgrade()
File "iridium-parser.py", line 618, in upgrade
return IridiumECCMessage(self).upgrade()
File "iridium-parser.py", line 958, in upgrade
return IridiumDAMessage(self).upgrade()
File "iridium-parser.py", line 1011, in init
the_crc=ida_crc16([chr(int(x,2)) for x in slice(crcstream,8)])
File "/usr/local/lib/python2.7/dist-packages/crcmod/crcmod.py", line 447, in crcfun
return fun(data, crc, table)
TypeError: argument 1 must be string or read-only buffer, not list

It doesn't happen with all lines in the output.bits file. Here's an example of what causes the error :

RAW: i-1598877655-t1 0001166 1623596160 A:OK I:00000000026 89% 94.992 179 0011000000110000111100110011000101000101011001011111011101001001000010001101011111000110010101000010010100001000001000000100100101100010001100100001011000000000000000000000000000001001000100100000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000110000000000000000000000010000100000011000000010000001000100011000100110011001000110000

Python 2.7.12
tried crcmod 1.7-2build2 from the Mint repo and also a freshly compiled 1.7 from pypi.org.

I've tried an output.bits from a previous install that I know parsed before and that fails in the same way. That makes me pretty sure that it's not the newly installed iridium-extractor that I have also just made.

:-(

Cheers,

Jem.

Problem using iridium parser

Hi,
I try to run the following command,

python iridium-parser.py output.bits > output.parsed

and I get the following error,

File “iridium-parser.py”, line 157 print(“Unknown input mode.”, file=sys.stderr)
SyntaxError: invalid syntax

do you have idea how I can fix that issue?

I’m using Ubuntu 20.04 and GNURadio 3.8.1.0, and I recorded the output.bits using gr-iridium on the maint3.8 branch.

thanks!

Error while reassembling using sbd mode

while running
reassembler.py -i output.parsed -m sbd
getting this error:
Traceback (most recent call last): File "reassembler.py", line 1853, in <module> zx.run(fileinput.input(ifile)) File "reassembler.py", line 201, in run self.consume(mo) File "reassembler.py", line 1090, in consume self.consume_l2(zz) File "reassembler.py", line 1253, in consume_l2 ult,prehdr.hex(":"),ascii(data, escape=True))) TypeError: hex() takes no arguments (1 given)

Request for schematics

I'm sorry for posting this here because it isn't really an issue per say. I am just curious if you have the schematics available for the little amplifier you built. And more information about how you built the DIY antenna?

screen shot 2016-02-28 at 2 41 45 pm

IIQ frames.

With IP traffic, everything is clear (There's a combination of three types of frames by counter) . But how do you interpret IIQ frames? How does their fragmentation relate to the rest of the IP traffic

Reassembler.py Module Not Found Error

I just cloned the latest version of iridium-toolkit and reassembler.py errors

Traceback (most recent call last):
  File "/home/user/iridium-toolkit/reassembler.py", line 12, in <module>
    import iridium.config
ModuleNotFoundError: No module named 'iridium.config'

I haven't had this issue before, but i don't think i've used the newest version since the iridium.config option was added.
I'm using python 3.9.5

Link to TNT AMBE not working

When I try to 'git clone' into the first link, it says 'can't find location'. It seems that the link takes us to a page on Osmocom that has files but no way to get them.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.