Iridium: принимаем и декодируем сигналы группировки спутников у себя дома

    Привет, Хабр.

    В предыдущей части мы рассмотрели прием сигналов спутников Inmarsat. Сейчас мы рассмотрим не менее интересную систему — спутниковую систему связи Iridium, принять сигналы которой также может у себя дома любой желающий.


    Покрытие сети Iridium, фото из Википедии

    Для тех, кому интересно как это работает, продолжение под катом.

    Примечание: ничего секретного в приведенных ниже данных нет, описанные в статье декодеры лежат на github уже не один год. Частоты и сигналы также доступны любому желающему, кто готов потратить 35$ на антенну и высунуть её в форточку. Тем не менее, система связи Iridium является действующей, поэтому некоторые данные не выкладываются из юридических соображений. Данный материал предназначен исключительно для ознакомления, публикация или хранение принятых сообщений могут быть не разрешены по законодательству тех или иных стран.

    Железо


    Тут ничего нового нет, все было описано в предыдущей статье. Я использовал антенну «Active L-Band 1525-1637 Patch Antenna», купить которую можно за 35$, и приемник SDRPlay, вместо которого можно использовать RTL SDR V3, стоимостью также около 35$. Таким образом, все обойдется в сумму дешевле 100$, что вполне доступно.

    Весь комплект для приема выглядит так (коробок спичек для масштаба):



    Далее, открываем окно (стекло глушит радиоволны этого диапазона), направляем антенну в небо, и можно принимать сигнал. Важно не забыть включить в настройках приемника bias-tee, т.к. антенна является активной и без подачи питания работать не будет. Если все было сделано правильно, на частоте примерно 1.6ГГц мы должны увидеть такую картинку:



    Кстати, если посмотреть спектр с большей детализацией, то хорошо виден наклон линий из-за эффекта Допплера — спутники движутся по орбите, и частота меняется.



    Интересно отметить два довольно принципиальных отличия Iridium и Inmarsat.

    Во-первых, в Inmarsat используются геостационарные спутники, летящие в космосе на геостационарной орбите высотой 35786км. В отличие от этого, в Iridium используется другой подход — более 60 спутников летают на низких орбитах (871км), покрывая всю территорию Земли (фото на КДПВ). Это позволяет использовать более компактные и ненаправленные антенны, также такая система лучше работает на северных территориях, где прием геостационарных спутников ограничен. Кстати, количество спутников Iridium было рассчитано так, что в любой момент времени абонент может использовать несколько видимых в небе спутников.



    И во-вторых, в Iridium используется принципиально другая схема передачи данных — вместо постоянных дата-линков на постоянной частоте используются короткие burst-пакеты, которые можно видеть на картинке.

    На этом мы закончим «теоретическую» часть, если все работает, то пора переходить к софту.

    Софт


    С софтом для декодирования есть одна «небольшая» сложность — он написан под Linux. Возможно, есть секретный способ скомпилировать Gnu Radio проекты под Windows, но у меня ни разу, кроме огромного числа ошибок, так ничего на выходе и не получилось. С Linux все просто и работает «из коробки», но я исхожу из того, что у большинства читателей все же установлен Windows. Так что мы пойдем обходным путем — запишем сигналы в HDSDR, а декодер для их обработки запустим из под Ubuntu в Windows 10. Благо что 10ка штатно предоставляет такую возможность.

    Шаг-1. Компиляция gr-iridium

    Для начала необходимо загрузить в App Store Ubuntu и установить туда GNU Radio.

    Собственно компиляция декодера gr-iridium особых сложностей не представляет:

    git clone https://github.com/muccc/gr-iridium.git
    cd gr-iridium
    mkdir build
    cd build
    cmake ..
    make
    sudo make install
    sudo ldconfig

    Процесс выглядит примерно так:



    Для работы декодера необходим модуль gr-osmosdr. Его компиляция делается по такому же принципу, с одной лишь разницей — нам необходимо отключить ненужные на этом шаге приемники, иначе получим ошибки компиляции.

    git clone git://git.osmocom.org/gr-osmosdr
    cd gr-osmosdr
    mkdir build
    cd build/
    cmake .. -DENABLE_UHD=OFF -DENABLE_RTL=OFF -DENABLE_BLADERF=OFF -DENABLE_FCD=OFF -DENABLE_RFSPACE=OFF -DENABLE_REDPITAYA=OFF -DENABLE_HACKRF=OFF
    make
    sudo make install
    sudo ldconfig

    Тут есть забавный подводный камень. Запустив make, я получил странные ошибки типа «c++: error: /wd4251: No such file or directory». Поиск в гугле показывает, что эти ошибки относятся к Windows-версии, что при компиляции под Ubuntu никак не может быть. Оказалось, может — выведя подробный лог командой «make -n», я обнаружил что диски Windows по умолчанию подмонтированы в Ubuntu, и cmake «подхватил» эти файлы:

    cd /home/dmitrii/Documents/gr-osmosdr-0.1.5/build/lib && /usr/bin/c++  -DBOOST_ALL_DYN_LINK -DHAVE_CONFIG_H=1 -DNOMINMAX -DUSE_SSE2 -Dgnuradio_osmosdr_EXPORTS -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/build/lib -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/include -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/lib -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/lib/file -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/lib/rtl_tcp -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/lib/soapy -isystem "/mnt/c/Program Files/PothosSDR/include"  -O3 -DNDEBUG -fPIC   -Wall -Wextra -Wno-unused-parameter -Wsign-compare -fvisibility=hidden -fvisibility-inlines-hidden -msse2 /MP /wd4251 /wd4503 -o CMakeFiles/gnuradio-osmosdr.dir/source_impl.cc.o -c /home/dmitrii/Documents/gr-osmosdr-0.1.5/lib/source_impl.cc

    Естественно, исходники несовместимы и ничего не компилируется. Такая вот особенность работы Ubuntu из под Windows. Решение простое — размонтируем папку (sudo umount /mnt/c), повторяем cmake и build, затем монтируем обратно (sudo mount -t drvfs C: /mnt/c). Подмонтированные диски нам пригодятся, когда мы будем обрабатывать записанные в HDSDR файлы.

    Последним шагом нам необходимо установить Iridium Toolkit:

    git clone https://github.com/muccc/iridium-toolkit.git

    Теперь все готово, и мы можем записать и обработать сигналы Iridium.

    Шаг-2. Запись сигналов

    Тут все просто — открываем HDSDR, выбираем участок где сигналов побольше, делаем IQ-запись. Сигналы в Iridium идут не постоянно, а «пакетами», так что возможно придется немного подождать. Недостаток лишь один — большой объем записи, одна минута с шириной полосы 2МГц занимает порядка 500Мбайт.

    Еще раз повторюсь, что под «нормальной» Linux это не нужно, и можно запустить gr-iridium сразу с SDR-приемником без промежуточной записи, но в Windows это не сработало — lsusb не видит подключенных устройств.

    Шаг-3. Обработка

    Останавливаем запись в HDSDR, переключаемся в Ubuntu в папку /mnt/c/Users/XXX/Documents/HDSDR и вводим команду:

    iridium-extractor -c 1619XXXXXX -r 2000000 -f sc16 --offline HDSDR_20200112_110653Z_1619XXXkHz_RF.wav | grep "A:OK"

    Здесь HDSDR_20200112_110653Z_1619XXXkHz_RF.wav это записанный нами файл, 1619XXXXXX — центральная частота записи и 2000000 — ширина полосы записанного wav-файла. Если все было сделано правильно, должен появиться примерно такой лог:



    Если пакетов не видно, идти дальше бесполезно, нужно выяснять в чем ошибка. Если записи видны, повторяем команду еще раз, сохраняем результаты в файл и обрабатываем файл с помощью iridium-parser.py:

    iridium-extractor -c 1619XXXXXX -r 2000000 -f sc16 --offline HDSDR_20200112_110653Z_1619XXXkHz_RF.wav | grep "A:OK" > output.bits
    
    python iridium-parser.py output.bits > output.parsed

    Теперь мы можем извлечь информацию из сохраненного файла output.parsed. «Достать» оттуда можно различные данные, например текстовые или даже голосовые сообщения. Из юридических соображений я делать это здесь не буду, желающие могут подробнее прочитать описание на странице проекта. Там есть интересные моменты, например в Iridium могут передаваться не только текстовые или голосовые, но и GSM-данные, т.е. Iridium-терминал может предоставлять услуги GSM-связи в тех местах, где обычного покрытия нет — спутник и терминал тут вероятно, работают лишь как «удлиннитель» для стандартных GSM-пакетов.

    Можно к примеру, продемонстрировать, как из записанных данных получить координаты летящего спутника:



    Координаты несложно импортировать в Google Maps и увидеть, что во время записи спутник пролетал где-то над Осло (красная линия):



    Про другие функции Iridium Toolkit можно почитать на странице github.

    Заключение


    Как можно видеть, процесс приема сигналов со спутников не так уж сложен, и с точки зрения изучения систем связи, достаточно интересен.

    Для желающих изучить Iridium более подробно, пара видео (на английском):



    Надеюсь, для лучшего понимания этого вполне достаточно.

    Как обычно, всем удачных экспериментов.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 19

      +2
      открываем окно

      <посмотрев на термометр> Считаю это преждевременным.
        0

        А какие полезные данные можно достать?

          0
          Текстовые + голосовые сообщения (в открытом виде) и GSM-трафик (зашифрованный).

          Но цель здесь в изучении системы, а не в получении каких-то практически полезных данных.
            0
            «Тестовые + голосовые сообщения» кто отправляет и куда?
              0
              Владельцы спутниковых терминалов iridium, очевидно. Наверно актуально в тех местах, где не ловит обычная связь.

              Во втором видео, если отмотаете до середины, есть пример декодирования звуковых сообщений.
          +1
          HACKING


          А где хакинг? Мы просто записали данные со спутника через готовое устройство, и вызвали утилу которая просто в хедере смотрит длину пакета и достает пакет.
            0
            На первом видео — авторы программы gr-iridium :) Парсинг всего этого из «сырого» IQ достаточно непростая задача.
              +3
              Комментатор выше имеет в виду, что хакингом оно не становится. Взяли протокол открытый, распаковали его. Так и распаковку zip через консоль тоже хакингом можно назвать.
              Вот вскрыть содержимое своего разговора по спутниковой трубку — это уже интереснее.
                +6
                Я думаю, в английском слово «хакинг» имеет более широкий смысл чем просто «взлом», и изучение протокола незнакомой системы в каком-то смысле тоже хакинг.

                Протокол Iridium кстати не открытый, документации в свободном доступе нет.

                Так и распаковку zip через консоль тоже хакингом можно назвать.

                Если вам достался архив незнакомого типа, вы его изучили и распаковали — почему нет?
                Понятно что использование чужой готовой утилиты хакингом не является.
                  +1
                  Строго говоря изучение протокола незнакомой системы это «reverse engineering», никак не хакинг.
                    0

                    Каким определением термина "хакинг" пользуетесь?

            +1
            разумеется это не взлом… иначе взломом можно было бы объявить и прослушивание радиотрафиков ментов, пожарных, спасателей… Вот ежели бы вы вклинились в разговор двух абонентов спутниковой связи, это было бы уже подсудное дело… Или, послушав разговор, разгласили его.
              –4

              Проблем нет ни каких на винде. Надо только достать военный софт. У меня, например, с антенны сигнал идет на коммутатор, с него на цифровой приёмник, с приёмника на ПК под виндой, где в трее сидит клиент-сервер. Второй комп с софтом, тоже под виндой семёркой цепляется по сети к первому, у него тоже в трее сидит клиент-сервер примочка, в которой прописаны айпишники и порты этих компов (это так в двух словах). Без этой примочки отцифрованные данные с одного компа не попадут к другому. Так вот, на первом ПК (куда завязан приемник), кроме этой примочки в трее есть софт, который ловит весь мусор с тундры, инмарсата, иридиума, смотря что при загрузке ты выберешь. И все эти данные выкладывает в db-файл в шару, который видит второй ПК с уже иным софтом фильтрации данных. Что собой представляет этот софт фильтрации? Программа, цепляющая файл базы данных и выдергивающая из этого файла то, что мы укадем в фильтре.

                0
                С софтом для декодирования есть одна «небольшая» сложность — он написан под Linux

                Используйте wsl :]
                Даже на WSL-1 работает огромное количество софта, в т.ч. гуишного (да и куда уж там, я даже gnome и xfce запусткал. Gnome даже юзабелен!). Если вдруг что — используйте wsl-2
                  0
                  Тут вопрос, может ли он видеть подключенные по USB устройства, в этом основная проблема. Декодер-то работает, но приемник он не видит, lsusb ничего не возвращает.
                    0
                    Надо проверять, ибо ничего сложнее hdd-кармана по USB я не цеплял несколько лет.
                    +2
                    Статью читали?
                    Благо что 10ка штатно предоставляет такую возможность.
                      0
                      wsl-2 я не пробовал, может там с железом действительно что-то улучшили.
                        0
                        Каюсь, прочитал по-диагонали и пропустил момент со сборкой.

                    Only users with full accounts can post comments. Log in, please.