Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.pdf
Скачиваний:
24
Добавлен:
19.04.2024
Размер:
31.35 Mб
Скачать

 

 

 

 

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

 

 

 

 

 

 

 

o

 

узел сообщает значение температуры выше определенного порогаdf,-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

сервер может ответить узлу командами предпринять соответствую- щие действия (скажем, открыть клапан). В сетях LoRaWAN исполь- зуется топология типа «звезда»: несколько узлов могут взаимодей- ствовать с одним или несколькими шлюзами,которые подключаются к одному сетевому серверу.

Узел

 

 

Узел

Шлюз

Сервер приложений

 

Узел

 

Сетевой сервер

 

 

Узел

Шлюз

 

 

 

Узел

 

Сервер приложений

 

 

Узел

 

 

Рис.13.1.Сетевая архитектура LoRaWAN

Захват трафика LoRa

В этом разделе мы продемонстрируем, как захватить трафик LoRa. Сделав это, вы научитесь использовать язык программирования Cir- cuitPython и взаимодействовать с простыми аппаратными инстру- ментами. Различные инструменты могут захватывать сигналы LoRa, но мы выбралите,которыедемонстрируютметоды,применимыедля других задач взлома IoT.

В этом упражнении мы будем использоватьтри компонента:

zzLoStik – устройство USB LoRa с открытым исходным кодом (до- ступно по адресу https://ronoth.com/lostik/). LoStik использует мо- дули Microchip RN2903 (США) или RN2483 (ЕС), в зависимости от региона, в котором вы находитесь;

zzCatWAN – USB-адаптер с открытым исходным кодом,совмести-

мый с LoRa и LoRaWAN (доступен по адресу https://electroniccats. com/store/catwan-usb-stick/);

zzHeltec LoRa 32 – плата разработки ESP32 для LoRa (https://heltec. org/project/wifi-lora-32/). Платы ESP32 – недорогие микроконтрол- леры с низким энергопотреблением.

Мы превратим LoStik в приемник, а плату Heltec – в отправителя, а затем попросим их связаться друг с другом с использованием LoRa.

Радио дальнего действия: LPWAN  357

 

 

 

 

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 в качестве сниффера для захвата тра-

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

фика LoRa.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

Настройка платы разработки Heltec LoRa 32

Начнем с программирования платы Heltec с помощью­ Arduino IDE. (Обратитесь к главе 7, чтобы познакомиться с Arduino.)

Установите среду разработки Arduino IDE, если у вас ее еще нет, а затемдобавьтебиблиотекиHeltecдляArduino-ESP32.Этопозволит вам программировать платы ESP32, такие как модуль Heltec LoRa, с помощью­ Arduino IDE. Для установки выберите File > Preferenc- es > Settings (Файл > Предпочтения > Настройки), затем нажмите кнопку Additional Boards Manager URLs (Менеджер дополнитель-

ных плат). Добавьте в список следующий URL: https://resource.heltec. cn/download/package_heltec_esp32_index.json и нажмите OK. Затем вы-

полните команды Tools > Board > Boards Manager (Инструменты > Плата > Менеджер плат). Найдите Heltec ESP32 и нажмите Install

(Установить)для пункта Heltec ESP32 Series отHeltecAutomation,ко-

торый должен появиться в списке плат.Мы специально использова-

ли версию 0.0.2-rc1.

Следующий шаг – установка библиотеки Heltec ESP32. Нажмите

Sketch > Include Library > Manage Libraries (Скетч > Включить биб­ лиотеку >Управлятьбиблиотеками).Найдите Heltec ESP32 и нажмите

Install для строки Heltec ESP32 Dev-Boards от Heltec Automation. Мы использовали версию 1.0.8.

  ПРИМЕЧАНИЕ    Вы можете найти наглядное руководство по уста- новке поддержки Heltec Arduino-ESP32 по адресу https://heltec-auto- mation-docs.readthedocs.io/en/latest/esp32+arduino/quick_start.html?high- light=esp32.

Чтобы проверить, где сохранены библиотеки, нажмите File > Pref- erences > Sketchbook location (Файл > Свойства > Расположение блокнота скетчей). В Linux указанный там каталог обычно находится в /home/<имя пользователя>/Arduino, где вы должны найти подпапку library, содержащую такие библиотеки, как Heltec ESP32 Dev Boards.

Вам также, вероятно, потребуется установить драйвер VCP моста UART, чтобы плата Heltec отображалась как последовательный порт при подключении ее к компьютеру. Вы можете получить драйверы по адресу https://www.silabs.com/products/development-tools/software/usb- to-uart-bridge-vcp-drivers/. При работе в Linux убедитесь, что вы выбра- ли правильную версию для ядра, которое используете. Примечания к версии включают инструкции о том, как скомпилировать модуль ядра.

Обратите внимание: если вы вошли в систему как пользовательбез полномочий root, вам может потребоваться добавить свое имя поль- зователя в группу имеющих право на чтение и запись файлов специ- альных устройств /dev/ttyACM* и /dev/ttyUSB*. Это потребуется для

358  Глава 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 из среды Arduino IDE. Откройте

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

терминал и введите эту команду:

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

$ ls -l /dev/ttyUSB*

crw-rw---- 1 root dialout 188, 0 Aug 31 21:21 /dev/ttyUSB0

Этот вывод означает, что владельцем группы файла является dial­ out (в вашем случае, вероятно, будет иное имя группы), так что вам нужно добавить свое имя пользователя в эту группу:

$ sudo usermod -a -G dialout <имя пользователя>

Пользователи, принадлежащие к группе dialout, имеют полный и прямойдоступ к последовательным портам в системе.Последобав- ления имени пользователя в группу у вас должен быть доступ, необ- ходимый для этого шага.

Программирование модуля Heltec

ЧтобызапрограммироватьмодульHeltec,подключимегокUSB-порту на нашем компьютере.

Убедитесь, что вы сначала подключили съемную антенну к основ- ному модулю.В противном случае можно повредить плату (риc.13.2).

Рис.13.2.Heltec Wi-Fi LoRa 32 (V2) основан на ESP32 и SX127x и поддерживает

Wi-Fi,BLE,LoRa и LoRaWAN.Стрелка указывает,где подключить антенну

ВсредеArduinoIDEвыберитеплату,нажавTools/Board/WiFiLoRa32 (V2), как показано на рис. 13.3.

Затем мы начнем писать программу Arduino, которая заставит мо- дуль Heltec действовать как отправитель пакетов LoRa. Код настроит радиомодульмодуляHeltecиотправитпростыеполезныеданныеLoRa в цикле.Щелкните File/New и вставьте код из листинга 13.1 в файл.

Радио дальнего действия: LPWAN  359

 

 

 

 

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

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.13.3.Выберите правильную плату в Arduino IDE: WiFi LoRa 32 (V2)

Листинг 13.1. Код Arduino, который позволяет модулю Heltec LoRa действовать как базовый отправитель пакетов LoRa

#include "heltec.h" #define BAND 915E6 String packet;

unsigned int counter = 0;

void setup() {

Heltec.begin(true, true, true, true, BAND); Heltec.display->init(); Heltec.display->flipScreenVertically(); Heltec.display->setFont(ArialMT_Plain_10); delay(1500);

Heltec.display->clear();

Heltec.display->drawString(0, 0, "Heltec.LoRa успешно настроен!");

Heltec.display->display(); delay(1000);

}

void loop() { Heltec.display->clear();

Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->setFont(ArialMT_Plain_10);

Heltec.display->drawString(0, 0, "Отправка пакетов: ");

Heltec.display->drawString(90, 0, String(counter)); Heltec.display->display();

360  Глава 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

 

 

 

 

LoRa.beginPacket();

LoRa.disableCrc(); LoRa.setSpreadingFactor(7);

LoRa.setTxPower(20, RF_PACONFIG_PASELECT_PABOOST);

LoRa.print("Не очень секретное сообщение LoRa ");

LoRa.endPacket();

 

 

 

 

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

 

 

 

 

counter++;

 

 

digitalWrite(LED, HIGH);

//

включить светодиод (HIGH – высокое напряжение)

delay(1000);

 

 

digitalWrite(LED, LOW);

//

погасить светодиод (LOW – низкое напряжение)

delay(1000);

 

 

}

Сначала мы включаем библиотеки Heltec, которые содержат функ- ции для взаимодействия с OLED-дисплеем на плате и микросхема- ми узла SX127x LoRa. Мы используем версию LoRa для США, поэтому определяем частоту равной 915 МГц.

Вызываем функцию setup(), которая, как вы помните, вызыва- ется один раз,когда стартует проектArduino.Здесь мы используем ее для инициализации модуля Heltec и его OLED-дисплея. Четыре логи- ческих значения в Heltec.begin включаютвстроенныйдисплей; радио LoRa; последовательный интерфейс, который позволяет вам видеть выходные данные устройства с помощью­ Serial Monitor, о котором вкратце рассказывается; и PABOOST (передатчик большой мощно- сти). Последний аргумент устанавливает частоту, используемую для передачи сигналов.Остальные команды внутри­ setup() инициализи- руют и настраивают OLED-дисплей.

Какиsetup(),функцияloop() являетсявстроеннойфункциейAr- duino и работает в бесконечном цикле, поэтому здесь мы размещаем нашу основную логику. Каждый цикл мы начинаем с печати строки Sending packet:, за которой следует счетчик на OLED-дисплее, чтобы отслеживать, сколько пакетов LoRa мы уже отправили.

Затем запускаем процесс отправки пакета LoRa. Следующие четыре команды настраивают радиомодуль LoRa: они отключают

проверку циклической избыточности (cyclic redundancy check, CRC)

в заголовке LoRa (по умолчанию CRC не используется), устанавли- вают коэффициент передачи на 7, мощность передачи – на макси- мальное значение 20 и добавляют в пакет фактическую полезную нагрузку (с помощью функции LoRa.print() из библиотеки Heltec). CRC–это значение фиксированнойдлиныдля обнаружения ошибок, которое помогает получателю проверять наличие повреждений па- кета. Коэффициент передачи определяет продолжительность пакета LoRa в эфире. SF7 – это самое короткое время в эфире, SF12 – самое длинное.Каждыйшагувеличенияпоказателяраспространенияудва- ивает время,котороетребуется в эфире для передачитого же объема данных. Несмотря на замедление, более высокие коэффициенты пе- редачи могут использоваться для передачи на большее расстояние. Мощность передачи – это мощность радиочастотной энергии в ват-

Радио дальнего действия: LPWAN  361

 

 

 

 

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

 

 

тах, которую будет излучать радиомодуль LoRa; чем она выше, тем

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

сильнее будет сигнал. Затем мы отправляем пакет , вызывая LoRa.

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

endPacket().

  ПРИМЕЧАНИЕ    Важно установить показатель распространения равным 7,если узлы LoRa находятся рядом друг с другом (в той же ком- нате или даже здании). В противном случае вы столкнетесь с серьез- ной потерей или повреждением пакетов.В нашем случае,когда все три компонента находились в одной комнате, было необходимо использо- вание SF7.

Наконец, увеличиваем счетчик пакетов и включаем, а затем гасим светодиод на плате Heltec,чтобы указать,что мытолько что отправи- ли еще один пакет LoRa .

ЧтобылучшеразобратьсявпредставленнойздесьпрограммеArdu- ino,мы рекомендуем изучить код библиотеки Heltec ESP32 LoRa идо-

кументацию по API: https://github.com/HelTecAutomation/Heltec_ESP32/ tree/master/src/lora/.

Тестирование отправителя LoRa

Чтобы попробовать код, загрузите его в плату Heltec. Убедитесь, что вы выбрали правильный порт в среде Arduino IDE. Нажмите Tools > Port (Инструменты > Порт) и выберите портUSB,к которому подклю- чен Heltec. Обычно это /dev/ttyUSB0 или, в некоторых случаях, /dev/ ttyACM0.

На этом этапе вы можете открыть консоль Serial Monitor, нажав Tools > Serial Monitor (Инструменты > Монитор последовательного порта). Мы перенаправили большую часть вывода на OLED-дисплей платы, поэтому консоль не нужна в этом упражнении.

Затем нажмите Sketch > Upload (Скетч > Загрузить), чтобы ском- пилировать, загрузить и запустить код на плате. Теперь вы должны увидеть счетчик пакетов на экране платы, как показано на рис. 13.4.

Рис.13.4.Плата Heltec,на которой запущен наш код и отображается номер отправляемого пакета

362  Глава 13