
Сниффер пакетов и передатчик Bluetooth Low Energy (BLE) для стандартных и нестандартных (сырых битов) на основе программно-определяемого радио (SDR).
========
BTLE — это бесплатный и открытый программный комплекс Software Defined Radio (SDR) для Bluetooth Low Energy (BLE), а также открытая разработка BTLE-чипа.
Включает в себя:
Убедитесь, что ваше SDR-оборудование (драйвер/библиотека) настроено правильно, прежде чем запускать этот проект.
git clone https://github.com/JiaoXianjun/BTLE.git
cd BTLE/host
mkdir build
cd build
cmake ../ (default. for HackRF)
cmake ../ -DUSE_BLADERF=1 (only for bladeRF)
make
./btle-tools/src/btle_rx
Приведённая выше команда выполняет сниффинг на канале 37. Если рядом есть BLE-устройства (телефон/планшет/ноутбук), на экране должно появиться множество пакетов.
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r500
Приведённая выше команда передаёт discovery-пакеты в ADV-канале. В другом BLE-сниффере (например, LightBlue) вы должны увидеть устройство с именем "SDR/Bluetooth/Low/Energy".
Для более быстрой последовательности операций на HACKRF используйте следующее:
#define TRANSFER_COUNT 4
#define TRANSFER_BUFFER_SIZE 4096
в hackrf/host/libhackrf/src/hackrf.c. Затем перекомпилируйте библиотеку HACKRF и переустановите её. Не забудьте перекомпилировать BTLE, чтобы изменения библиотеки HACKRF вступили в силу.
Кроме инструментов, в каталоге matlab содержатся сценарии оценки алгоритмов и другие полезные скрипты
-h --help
Вывести все аргументы/варианты использования.
-c --chan
Номер канала. По умолчанию 37 (один из ADV-каналов). Допустимые значения 0~39 (все ADV- и DATA-каналы).
-g --gain
Коэффициент усиления при приёме (Rx gain) в дБ. У HACKRF rxvga по умолчанию 6, диапазон 0–62. У bladeRF по умолчанию максимальный Rx gain 66 дБ (диапазон 0–66). Усиление следует подбирать очень тщательно, чтобы обеспечить наилучшую производительность в ваших условиях. Рекомендуется начинать с низкого усиления, потому что высокое усиление всегда вызывает сильные искажения и не даёт результата.
-l --lnaGain
Коэффициент усиления LNA в дБ (только HackRF). По умолчанию 32, диапазон 0–40. Усиление следует подбирать очень тщательно, чтобы обеспечить наилучшую производительность в ваших условиях.
-b --amp
Включить усилитель (amp) (только HackRF). По умолчанию выключен.
-a --access
Адрес доступа (access address). По умолчанию 8e89bed6 для ADV-каналов 37, 38, 39. Для data-канала следует указывать правильное значение в соответствии с захваченной процедурой установки соединения.
-k --crcinit
По умолчанию 555555 для ADV-канала. Для data-канала следует указывать правильное значение в соответствии с захваченной процедурой установки соединения.
-v --verbose
Подробный режим. Выводить больше информации при ошибке
-r --raw
Сырой режим. После обнаружения адреса доступа выводить следующие 42 сырых байта (без дескремблирования и разбора)
-f --freq_hz (need argument)
Эта частота (Гц) переопределит настройку канала (если нужно работать на частоте, отличной от BTLE. Более универсально).
-m --access_mask (need argument)
Если в этой маске бит равен 1, соответствующий бит адреса доступа будет учитываться при принятии решения о наличии пакета (если нужна более короткая/разреженная уникальная последовательность для обнаружения пакета. Более универсально).
-o --hop
Включает отслеживание data-канала (перескок частоты) после того, как информация о настройке соединения захвачена в пакете ADV_CONNECT_REQ на ADV-канале.
-s --filename
Сохранять пакеты в pcap-файл.
btle_tx packet1 packet2 ... packetX ... rN
или
btle_tx packets.txt
packets.txt — это текстовый файл, содержащий параметры командной строки (packet1 packet2 ... rN). Один параметр в строке. Строка, начинающаяся с "#", считается комментарием. См. пример packets.txt
packetX
это одна строка, описывающая один пакет. Все пакеты образуют последовательность пакетов.
rN
означает, что последовательность будет повторена N раз. Если параметр не указан, последовательность будет отправлена только один раз.
Формат строки packetX
channel_number-packet_type-field-value-field-value-...-Space-value
Каждая строка-дескриптор начинается с номера BTLE-канала (0~39), затем следует packet_type (RAW/iBeacon/ADV_IND/ADV_DIRECT_IND/и т. д. См. все примеры форматов В КОНЦЕ: Приложение), затем пара поле-значение, специфичная для packet_type, и в конце — пара Space-value (необязательная), где значение указывает, сколько миллисекунд ожидать после отправки этого пакета.
НЕ используйте пробел " " в дескрипторе пакета в командной строке. В дескрипторе пакета в txt-файле пробел использовать МОЖНО.
НЕ используйте "-" внутри каждого поля. "-" — это служебный символ, используемый для разделения полей в дескрипторе пакета.
Откройте приложение LightBlue (или другой BLE-сниффер) на iPhone/устройстве перед выполнением этой команды:
./btle-tools/src/btle_tx ../btle-tools/src/packets_discovery.txt
В приложении LightBlue вы увидите устройство с именем "SDR Bluetooth Low Energy".
Соответствующая командная строка:
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r40
Примечание: пробел " " заменён на "/", поскольку пробел " " не поддерживается в командной строке.