- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •4. Оценка сети
- •Переход в сеть IoT
- •VLAN и сетевые коммутаторы
- •Спуфинг коммутатора
- •Двойное тегирование
- •Имитация устройств VoIP
- •Идентификация устройств IoT в сети
- •Обнаружение паролей службами снятия отпечатков
- •Атаки MQTT
- •Настройка тестовой среды
- •Написание модуля MQTT Authentication-Cracking в Ncrack
- •Тестирование модуля Ncrack на соответствие MQTT
- •Заключение
- •5. Анализ сетевых протоколов
- •Проверка сетевых протоколов
- •Сбор информации
- •Анализ
- •Создание прототипов и разработка инструментов
- •Работа с Lua
- •Общие сведения о протоколе DICOM
- •Генерация трафика DICOM
- •Включение Lua в Wireshark
- •Определение диссектора
- •Определение основной функции диссектора
- •Завершение диссектора
- •Создание диссектора C-ECHO
- •Начальная загрузка данных функции диссектора
- •Анализ полей переменной длины
- •Тестирование диссектора
- •Разработка сканера служб DICOM для механизма сценариев Nmap
- •Написание библиотеки сценариев Nmap для DICOM
- •Коды и константы DICOM
- •Написание функций создания и уничтожения сокетов
- •Создание заголовков пакетов DICOM
- •Написание запросов контекстов сообщений A-ASSOCIATE
- •Чтение аргументов скрипта в движке сценариев Nmap
- •Определение структуры запроса A-ASSOCIATE
- •Анализ ответов A-ASSOCIATE
- •Создание окончательного сценария
- •Заключение
- •6. Использование сети с нулевой конфигурацией
- •Использование UPnP
- •Стек UPnP
- •Распространенные уязвимости UPnP
- •Злоупотребление UPnP через интерфейсы WAN
- •Другие атаки UPnP
- •Использование mDNS и DNS-SD
- •Как работает mDNS
- •Как работает DNS-SD
- •Проведение разведки с помощью mDNS и DNS-SD
- •Злоупотребление на этапе проверки mDNS
- •Атаки «человек посередине» на mDNS и DNS-SD
- •Использование WS-Discovery
- •Как работает WS-Discovery
- •Подделка камер в вашей сети
- •Создание атак WS-Discovery
- •Заключение
- •UART
- •Аппаратные средства для связи с UART
- •Как найти порты UART
- •Определение скорости передачи UART
- •JTAG и SWD
- •JTAG
- •Как работает SWD
- •Аппаратные средства для взаимодействия с JTAG и SWD
- •Идентификация контактов JTAG
- •Взлом устройства с помощью UART и SWD
- •Целевое устройство STM32F103C8T6 (Black Pill)
- •Настройка среды отладки
- •Кодирование целевой программы на Arduino
- •Отладка целевого устройства
- •Заключение
- •Как работает SPI
- •Как работает I2C
- •Настройка архитектуры шины I2C типа «контроллер–периферия»
- •Заключение
- •9. Взлом прошивки
- •Прошивка и операционные системы
- •Получение доступа к микропрограмме
- •Взлом маршрутизатора Wi-Fi
- •Извлечение файловой системы
- •Статический анализ содержимого файловой системы
- •Эмуляция прошивки
- •Динамический анализ
- •Внедрение бэкдора в прошивку
- •Нацеливание на механизмы обновления микропрограмм
- •Компиляция и установка
- •Код клиента
- •Запуск службы обновления
- •Уязвимости служб обновления микропрограмм
- •Заключение
- •10. Радио ближнего действия: взлом rFID
- •Радиочастотные диапазоны
- •Пассивные и активные технологии RFID
- •Структура меток RFID
- •Низкочастотные метки RFID
- •Высокочастотные RFID-метки
- •Настройка Proxmark3
- •Обновление Proxmark3
- •Клонирование низкочастотных меток
- •Клонирование высокочастотных меток
- •Имитация RFID-метки
- •Изменение содержимого RFID-меток
- •Команды RAW для небрендированных или некоммерческих RFID-тегов
- •Подслушивание обмена данными между меткой и считывателем
- •Извлечение ключа сектора из перехваченного трафика
- •Атака путем подделки RFID
- •Автоматизация RFID-атак с помощью механизма скриптов Proxmark3
- •Пользовательские сценарии использования RFID-фаззинга
- •Заключение
- •11. Bluetooth Low Energy (BLE)
- •Как работает BLE
- •Необходимое оборудование BLE
- •BlueZ
- •Настройка интерфейсов BLE
- •Обнаружение устройств и перечисление характеристик
- •GATTTool
- •Bettercap
- •Взлом BLE
- •Настройка BLE CTF Infinity
- •Приступаем к работе
- •Заключение
- •12. Радиоканалы средней дальности: взлом Wi-Fi
- •Как работает Wi-Fi
- •Атаки Wi-Fi на беспроводные клиенты
- •Деаутентификация и атаки «отказ в обслуживании»
- •Атаки на Wi-Fi путем подключения
- •Wi-Fi Direct
- •Атаки на точки доступа Wi-Fi
- •Взлом WPA/WPA2
- •Взлом WPA/WPA2 Enterprise для сбора учетных данных
- •Методология тестирования
- •Заключение
- •13. Радио дальнего действия: LPWAN
- •Захват трафика LoRa
- •Настройка платы разработки Heltec LoRa 32
- •Настройка LoStik
- •Превращаем USB-устройство CatWAN в сниффер LoRa
- •Декодирование протокола LoRaWAN
- •Формат пакета LoRaWAN
- •Присоединение к сетям LoRaWAN
- •Атаки на LoRaWAN
- •Атаки с заменой битов
- •Генерация ключей и управление ими
- •Атаки воспроизведения
- •Подслушивание
- •Подмена ACK
- •Атаки, специфичные для приложений
- •Заключение
- •14. Взлом мобильных приложений
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Защита данных и зашифрованная файловая система
- •Подписи приложений
- •Аутентификация пользователя
- •Управление изолированными аппаратными компонентами и ключами
- •Проверенная и безопасная загрузка
- •Анализ приложений iOS
- •Подготовка среды тестирования
- •Статический анализ
- •Динамический анализ
- •Атаки путем инъекции
- •Хранилище связки ключей
- •Реверс-инжиниринг двоичного кода
- •Перехват и изучение сетевого трафика
- •Анализ приложений Android
- •Подготовка тестовой среды
- •Извлечение файла APK
- •Статический анализ
- •Обратная конвертация двоичных исполняемых файлов
- •Динамический анализ
- •Перехват и анализ сетевого трафика
- •Утечки по побочным каналам
- •Заключение
- •15. Взлом умного дома
- •Физический доступ в здание
- •Клонирование RFID-метки умного дверного замка
- •Глушение беспроводной сигнализации
- •Воспроизведение потока с IP-камеры
- •Общие сведения о протоколах потоковой передачи
- •Анализ сетевого трафика IP-камеры
- •Извлечение видеопотока
- •Атака на умную беговую дорожку
- •Перехват управления интеллектуальной беговой дорожкой на базе Android
- •Заключение
- •Инструменты для взлома интернета вещей
- •Предметный указатель
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
root@kali:~/lora# ./lora_recv.py /dev/ttyUSB0 serial port connection made
4294967245
Not so secret LoRa message Not so secret LoRa message Not so secret LoRa message Not so secret LoRa message Not so secret LoRa message
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Вы должны ожидать появления нового сообщения LoRa с той же полезной нагрузкой каждые несколько секунд, учитывая, как часто программа вызывает цикл модуля Heltec.
Превращаем USB-устройство CatWAN в сниффер LoRa
Теперь давайте настроим устройство, которое позволит нам перехва- тыватьэтоттрафик LoRa.ВUSB-устройстве CatWAN (рис.13.6) исполь- зуется чип RFM95,ивы можетединамически настроитьего на исполь- зование 868 МГц (для Европейского Союза) или 915 МГц (для США).
Рис.13.6.USB-устройство CatWAN,совместимое с LoRa и LoRaWAN,основано на приемопередатчике RFM95.Стрелка указывает на кнопку сброса (RST)
Устройство поставляется в пластиковом корпусе, который необ- ходимо снять, чтобы получить доступ к кнопке сброса. Подключив устройство к компьютеру, дважды быстро нажмите кнопку сброса. В проводнике Windows должен появиться USB-накопитель под назва- нием USBSTICK, потому что CatWAN оснащен встроенной памятью.
Настройка CircuitPython
Загрузите и установите последнюю версию Adafruit CircuitPython по адресу https://circuitpython.org/board/catwan_usbstick/. CircuitPython – это простой открытый исходный язык, основанный на MicroPython, вер- сии Python, оптимизированной для работы на микроконтроллерах. Мы использовали версию 4.1.0.
Радио дальнего действия: LPWAN 367
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
|
X |
|
|
|
|
|
|||
|
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
||
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
BUY |
|
|
|||
CatWAN использует микроконтроллер SAMD21, у которого есть за- |
|
|
|
to |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
m |
|||
|
w Click |
|
|
|
|
|
|
|||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
грузчик, упрощающий запись прошивки. Он использует формат USB- |
. |
.c |
|
|||||||||
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
прошивки Microsoft (UF2), который представляет собой формат файла, |
|
|
|
|
|
|
|
|
|
|
||
применяемый для прошивки микроконтроллеров в USB-устройствах. |
|
|
|
|
|
|
|
|
|
|
||
Это позволяет вам перетащить файл UF2 на устройство USBSTICK. Это |
|
|
|
|
|
|
|
|
|
|
||
действиеавтоматическисбрасываетзагрузчик.Затемустройствопере- |
|
|
|
|
|
|
|
|
|
|
||
загружается и переименовывает встроенный накопитель в CIRCUITPY. |
|
|
|
|
|
|
|
|
|
|
||
Вам также понадобятся две библиотеки CircuitPython: Adafruit |
|
|
|
|
|
|
|
|
|
|
||
CircuitPython RFM9x и Adafruit CircuitPython BusDevice. Вы можете |
|
|
|
|
|
|
|
|
|
|
||
найти их на https://github.com/adafruit/Adafruit_CircuitPython_RFM9x/re- |
|
|
|
|
|
|
|
|
|
|
||
leases и https://github.com/adafruit/Adafruit_CircuitPython_BusDevice/releases. |
|
|
|
|
|
|
|
|
|
|
||
Мы установили их с помощью adafruitcircuitpython – rfm9x-4.x-mpy- |
|
|
|
|
|
|
|
|
|
|
||
1.1.6.zip и adafruit-circuitpython-bus-device-4.xmpy – 4.0.0.zip. Номер |
|
|
|
|
|
|
|
|
|
|
||
4.x относится к версии CircuitPython; убедитесь, что эти библиотеки |
|
|
|
|
|
|
|
|
|
|
||
соответствуютвашей установленной версии.Нужно будетразархиви- |
|
|
|
|
|
|
|
|
|
|
||
роватьихиперенестифайлы.mpyнаCIRCUITPY.Обратитевнимание, |
|
|
|
|
|
|
|
|
|
|
||
что для библиотеки шины файлы.mpy должны находиться в каталоге |
|
|
|
|
|
|
|
|
|
|
||
библиотеки шины, как показано на рис. 13.7. Файлы библиотеки |
по- |
|
|
|
|
|
|
|
|
|
|
мещаются в каталог lib, и есть подкаталог adafruit_bus_device для мо- дулей I2C и SPI. Файл code.py, который вы создадите, находится в са- мом верхнем (корневом) каталоге памяти USB-устройства.
Рис.13.7.Структура каталогов в памяти устройства CIRCUITPY
368 Глава 13
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Затем мы настроим Serial Monitor (с той же функциональностью, |
|
|
|
|
|
m |
||||
w Click |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
что и Serial Monitor Arduino, о чем говорилось ранее). Для этого мыdf-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
использовали PuTTY в Windows,потому что он работаетнамноголуч- ше,чемлюбойдругой эмулятортерминала,который мытестировали. Установив PuTTY в вашей системе, определите правильный COMпорт,открыв диспетчер устройств Windows и перейдя к портам (COM
и LPT),– рис. 13.8.
Рис.13.8.Настройка PuTTY для подключения к последовательной консоли на COM4,который мы определили в диспетчере устройств как порт,используемый устройством CatWAN.Ваш COM-порт может отличаться
ОтключитеисноваподключитеCatWANккомпьютеру,чтобыопре- делить правильный COM-порт. Этот прием работает, потому что вы увидите, какой COM-порт исчезает в диспетчере устройств, когда вы его отсоединяете, и появляется снова, когда снова его подключаете. Затем на вкладке Session (Сеанс) выберите Serial (Последовательный порт). Введите правильный COM-порт в поле Serial line (Последова- тельный канал) и измените скорость передачи данных на 115200.
Разработка сниффера
Для написания кода CircuitPython мы рекомендуем вам использовать редакторMU(https://codewith.mu/).Впротивномслучаеизменениявпа- мяти CIRCUITPY могут не сохраняться правильно и в реальном вре- мени. При первом запуске MU выберите режим Adafruit CircuitPython.
Радио дальнего действия: LPWAN 369
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
|
X |
|
|
|
|
|
|||
|
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
||
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
BUY |
|
|
|||
Вы также можете изменить режим позже, используя значок режима |
|
|
|
to |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
m |
|||
|
w Click |
|
|
|
|
|
|
|||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
в строке меню. Запустите новый файл, введите код из листинга 13.3 |
. |
.c |
|
|||||||||
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
и сохраните файл на диске CIRCUITPY, используя имя code.py. Обрати- |
|
|
|
|
|
|
|
|
|
|
||
те внимание,что имя файла важно,потому что CircuitPython будет ис- |
|
|
|
|
|
|
|
|
|
|
||
кать файл кода с именем code.txt, code.py, main.txt или main.py в этом |
|
|
|
|
|
|
|
|
|
|
||
порядке. |
|
|
|
|
|
|
|
|
|
|
|
|
Когда вы впервые сохраняете файл code.py на диске и каждый раз, |
|
|
|
|
|
|
|
|
|
|
||
когда вы вносите изменения в код с помощью |
MU, редактор автома- |
|
|
|
|
|
|
|
|
|
|
тически запускает эту версию кода в CatWAN. Вы можете отслежи- вать это выполнение, используя последовательную консоль с PuTTY. Используя консоль, можете нажать клавиши Ctrl+C, чтобы прервать программу, или Ctrl+D, чтобы перезагрузить ее.
Программа аналогична базовому приемнику LoRa, который мы представили с LoStik. Основная особенность заключается в том, что она постоянно применяет разные коэффициенты передачи, чтобы увеличить шансы прослушивания различных типов трафика LoRa.
Листинг 13.3. Код CircuitPython для USB-устройства CatWAN,
выступающего в качестве базового сниффера LoRa
import board import busio import digitalio
import adafruit_rfm9x
RADIO_FREQ_MHZ = 915.0
CS = digitalio.DigitalInOut(board.RFM9X_CS) RESET = digitalio.DigitalInOut(board.RFM9X_RST)
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) rfm9x = adafruit_rfm9x.RFM9x(spi, CS, RESET, RADIO_FREQ_MHZ) rfm9x.spreading_factor = 7
print('Ожидаем пакеты LoRa...') i = 0
while True:
packet = rfm9x.receive(timeout=1.0, keep_listening=True, with_header=True) if (i % 2) == 0:
rfm9x.spreading_factor = 7 else:
rfm9x.spreading_factor = 11 i = i + 1
if packet is None:
print('Ничего нет. Продолжаем прослушивать...') else:
print('Received (raw bytes): {0}'.format(packet)) try:
packet_text = str(packet, 'ascii') print('Received (ASCII): {0}'.format(packet_text))
except UnicodeError:
print('пакет содержит не-ASCII символы)
370 Глава 13
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
|
X |
|
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
|||
|
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
BUY |
|
|
||||
rssi = rfm9x.rssi |
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
w |
|
|
|
|
|
|
|
|
|
m |
||
print('Уровень принятого сигнала: {0} dB'.format(rssi)) |
w Click |
|
|
|
|
|
|
o |
||||
|
w |
|
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
e |
|
||||
|
|
|
p |
df |
|
|
|
g |
.c |
|
||
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Сначала импортируем необходимые модули, как мы обычно де- лаем это в Python. Модуль платы содержит имена основных выводов платы, которые могут отличаться от платы к плате. Модуль busio со- держит классы, поддерживающие несколько последовательных про- токолов, включая SPI, который использует CatWAN. Модуль digitalio обеспечивает доступ к базовому цифровому вводу/выводу, а adafruit_ rmf9x – наш основной интерфейс к приемопередатчику LoRa RFM95, который использует CatWAN.
Мы установили радиочастоту на 915 МГц ,потому что используем версиюCatWANдляСША.Всегдапроверяйтечастоту,соответствую-
щуювашейверсиимодуля.Например,установитечастоту868МГц,если вы используете версию модуля для ЕС1.
ОстальныекомандынастраиваютшинуSPI,подключеннуюкрадио модулю, в частности выводы выбора микросхемы (CS) и сброса, что требует инициализации нашего класса rfm9x . Шина SPI использует контактCS,какописановглаве5.ЭтотклассопределенвмодулеRFM95
CircuitPython по адресу https://github.com/adafruit/Adafruit_CircuitPython_
RFM9x/blob/master/adafruit_rfm9x.py.Стоитизучитьисходныйкод,чтобы лучше понять, как именно работает этот класс.
Самая важная часть инициализации – это настройка коэффициен- та передачи . Мы начинаем с SF7, но позже, в основном цикле, пе- реключимся на другие режимы, чтобы увеличить шансы перехваты- вать все типы трафика LoRa. Затем начинаем опрос чипа на предмет новых пакетов внутри бесконечного цикла, вызывая rfm9x.receive() со следующими аргументами:
zztimeout = 1.0 – означает, что чип будет ждать до одной секунды для пакета, который нужно получить и декодировать;
zzkeep_listening = True – переведет чип в режим прослушивания после получения пакета. В противном случае он вернется в ре- жим ожидания и проигнорирует любой будущий прием;
zzwith_header = True – вернет четырехбайтовый заголовок LoRa вместе с пакетом. Это важно, потому что, когда пакет LoRa ис- пользует режим неявного заголовка, полезная нагрузка может быть частью заголовка; если вы не читаете его, можете пропус тить часть данных.
Поскольку мы хотим,чтобы CatWANдействовал как сниффер LoRa, нам необходимо постоянно переключаться между показателями рас- пространения, увеличивающими наши шансы перехвата трафика LoRa с узлов, которые могут быть либо слишком близко, либо слиш- ком далеко. Переключение между 7 и 11 в значительной степени по-
1В Россиидля LoraWAN выделендиапазон частот864-870 МГц,поэтому сле- дует приобретать модуль, предназначенный для рынка ЕС.– Прим.ред.
Радио дальнего действия: LPWAN 371