Google
 
Web www.vnc.org.ua
avtobazar.com.ua
Bluetooth в Linux
Original
Перевод: Сгибнев Михаил

Представлять Bluetooth в 2006 году довольно тяжело. По общему мнению, эта технология должна была появиться намного раньше, чтобы быть по настоящему распространенной к настоящему моменту. Но, поскольку этого не случилось, репутация ее оказалась несколько подмоченой. Bluetooth популярен, но не столь популярен как WiFi. Однако, возможности этой технологии довольно широки, особенно если приложить немного усилий.

Вы знакомы с Bluetooth? Может быть, вы даже использовали эту технологию с вашим сотовым телефоном или наушниками? Если это так, то вы можете задуматься, как получить больше, особенно если вам доступна только техническая литература, полная всяких умных слов вроде "piconets" или "scatternets", но лишенная прикладных задач.

Не волнуйтесь. В этой статье я покажу вам, как работать с Bluetooth, а не читать умности. Если вы еще не знакомы с этой изящной технологией, то я буду рад ввести вас в этот удивительный мир.

Итак, мы рассмотрим сборку и настройку модуля Bluetooth, обзор устройств беспроводной сети и соединение с ними. Я представлю сервис PAN, обеспечивающий работу с беспроводными IP-сетями.

В последующих статьях этой серии мы рассмотрим передачу файлов, экспорт последовательных портов, беспроводной периферии HID, такой как клавиатуры и мыши, потоковое аудио. Затем последуют такие прекрасные вещи как добавление Bluetooth устройств к non-Bluetooth, управление по Bluetooth скринсейвером и изучение существующих Bluetooth атак.

Чего мы хотим добиться? Необходимо синхронизировать беспроводные устройства, экспортировать последовательный порт для работы факса или модема, обмен файлами и работа HID периферии.

Определения

Чем является Bluetooth? Есть много определений, но лично мне больше нравится - WiFi с уменьшеным энергопотреблением.

С Bluetooth возможно не только связь между компьютерами, но и использование беспроводных гарнитур, синхронизация с КПК, мыши и клавиатуры.

Поскольку Bluetooth требует гораздо меньше энергии чем WiFi и так как сетевой уровень в нем отделен от интерфейса, есть много больше творческих и интересных возможностей использования этой технологии.

Говоря об интерфейсах, мы нуждаемся в в аппаратных средствах Bluetooth и программном обеспечении, чтобы использовать особенности Bluetooth. В некоторые аппаратные средства прошиты программные модули, реализующие какой-либо функционал, но это уменьшает гибкость, дороже стоит и усложняет устройство.

Для этой статьи, я предпочитаю легкие аппаратные средства Bluetooth и развитое программное обеспечение.

Ядро Linux может использовать различные программные стеки. Самые известные - bluez и affix. Я предпочитаю bluez, потому что теперь он входит в состав ядра Linux.

Установка

Аппаратное обеспечение
Есть три основных реализации Bluetooth: USB, последовательный порт и PCMCIA. Возможно, в ваш компьютер Bluetooth уже установлен? Для того, чтобы выяснить это, обратитесь к документации на компьютер.

PCMCIA карты обычно представляют собой мост PCMCIA-to-serial и сам чип Bluetooth при бо`льшей стоимости. Поэтому, если необходимого устройства у вас нет, остановите свой выбор на последовательном или USB устройстве.

Я рекомендую D-Link DBT-120, поскольку содержит удобные особенности, которые я рассмотрю несколько позже, особенно если вы будете использовать клавиатуру Bluetooth. Если нет каких либо предпочтений, то вы можете приобрести любой USB адаптер. Адаптеры для последовательных линий обычно более дороги и медленны.

Если вы не счастливый обладатель уникальной машины, то, скорее всего, можете пропустить следующий раздел.

Неподдерживаемое аппаратное обеспечение
Помните - вам необходима поддержка как минимум последовательного порта для подключения Bluetooth. Поскольку большинство устройств (, типа карманных компьютеров) имеет свободные последовательные порты на системных платах, то подключение не должно составить большого труда. Самый простой случай - когда придется припаять к материнской плате четыре провода: два на прием/передачу и два на питание/землю. Хотя лучше шесть - тогда еще становится возможным управление потоком.

Большое количество сайтов содержат решения, как добавить поддержку Bluetooth к наладонникам Siemens Simpad, Sharp Zaurus или Psion MX. Вот некоторые из них: Конечно, помимо проводов, припаяных к материнской плате, нужно еще подключить сам чип Bluetooth. Самый простой вариант - собрать модуль "все в одном", в этом случае сам чип, антенна и конвертер питания (TTL 5V/CMOS 3.3V) собираются на одной маленькой плате.

Если вы хотете сэкономить немного денег, то можете переделать более дешевые USB-токены на последовательный порт. Если же вы хотите сэкономить время, то можете купить все необходимое в онлайн-магазинах. Вот некоторые полезные ссылки: Протокол последовательного порта
Если ваш последовательный порт ограничен двумя линиями (receive/send), вам необходимо сконфгурировать устройство на использование протокола BCSP вместо H4. H4 - промышленный стандарт, который требует управления потоком данных, в то время как BCSP - пропиетарный протокол, который работает точно также без управления потоком данных. Поскольку стек bluez поддерживает оба протокола, то выбор остается за вами.

Учтите, что ваш чип может уже быть настроен на использование какого-либо из этих протоколов. Для смены протокола необходимо воспользоваться утилитой pskey. Иструкции по использованию можно прочитать в этом документе или в Opensimpad introduction to Pskey.

Будьте внимательны! Очень легко уничтожить модуль ошибкой в pskey.

Программное обеспечение
В зависимости от конфигурации вашего ядра Linux и установленного программного обеспечения, поддержка Bluetooth может заработать "из коробки".

Если вы используете дистрибутив с автоматической установкой пакетов, такой как Debian или Red Hat, вы можете получить прекомпилированную версию bluez, без всяких проблем с зависимостями. В этом случае просто перейдите к разделу "Запускаем bluez".

В противном случае, я рекомендую перекомпилировать ядро со следующим патчем. (смотри также www.holtmann.org/linux/kernel).

Процесс компилирования ядра выходит за рамки этой статьи, но он может оказаться полезным для задействования функций, включенных в более новые, чем используемая вами, версии bluez. Это особенно верно для моей следующей статьи, в которой рассматриваются расширенные возможности, типа поддержки клавиатуры Bluetooth.

Итак, я предполагаю, что у вас имеется ядро с поддержкой bluez или загружаемый автоматически модуль ядра.

Компиляция программного обеспечения
Если вы хотите установить все самостоятельно, то вам необходимо использовать определенную версию bluez, для того, чтобы избежать любых зависимостей от DBus. Поскольку от DBus зависит много частей Gnome, не хотелось бы все поломать.

Я рекомендую скачать bluez-libs-2.10, bluez-utils-2.10, bluez-hcidump-1.12, and bluez-hciemu-1.0: Если вы используете не i386-совместимый компьютер (например наладонник с ARM или MIPS CPU), пожалуйста сделайте кросс-компиляцию с инструментарием, которого требует ваша архитектура. Узнать все необходимые параметры можно на соответствующих сайтах (например Zaurus toolchain).

Компиляция осуществляется как и все в GNU. Я предпочитаю помещать все в /opt/bluetooth, чтобы не войти в противоречие с установкой по умолчанию.

Сначала установим библиотеки, которые будут использоваться в дальнейшем: Устанавливаем утилиты: В заключение, устанавливаем приложение для отладки: Для использования установленных бинарных файлов выполните: или добавьте соответствующую строку в .bashrc. Теперь мы готовы!

Добавляем последовательный токен
Все просто. Необходимо указать имя последовательного порта, протокол, скорость порта, управление потоком и скорость использования.

Например, у нас имеется токен, подключенный к первому порту, по протоколу BCSP, с конфигурацией прошивки на 115200 и вы хотите установить рабочую скорость в 230400, используйте: В случае последовательного токена вы или непосредственно знаете параметры соединения, поскольку установили их с помощью pskey или можете найти их на сайте, где брали инструкции по включению Bluetooth.

Я настоятельно не рекомендую изменять скорость порта утилитой pskey. Сохраните имеющееся значение по умолчанию и предоставьте hciattach показать волшебство работы на более высоких скоростях. С его помощью вы можете совершенно безопасно подняться до скорости 921600, в случае появления проблем достаточно будет просто перегрузить чип, что-бы вернуться до 115200.

Запуск Bluetooth и подключение к другому устройству

Запустить устройство можно следующей командой: Это означает, что у вас имеется устройство USB с адресом 00:80:C8:45:31:F8, работаещее с различными опциями.

Адрес устройства уникален и похож на MAC адрес для устройств Ethernet. Его невозможно изменить, если только вы не используете модуль Bluetooth для разработчиков. В этом случае, для смены адреса адреса используется утилита pskey. Вследствие этого, я хочу отговорить вас использовать этот адрес в качестве секретного ключа.

Давайте посмотрим Bluetooth окружение: Как удивительно, мы что-то обнаружили!

Сканирование нам вывело адрес другого устройства и его имя. Владелец устройства назначил ему имя, хотя его может и не быть. Однако, я рекомендую использовать вам полное имя устройства, если вы владеете собственным доменом - это предоставит возможность найти владельца устройства с через Whois.

Пежде, чем мы двинемся дальше, запустим демон hcid и установим PIN, для защиты наших соединений. Отредактируйте файл hcid.conf из каталога /opt/bluetooth/etc/bluetooth так, чтобы он выглядел следующим образом: Что все это значит?

Устройства Bluetooth автоматически организовывают себя в piconets, где есть мастер и подчиненные устройства.В piconet может быть только один мастер, но мастер может быть подчиненным в другой piconet. Два piconets, объединившись, образуют scatternet.

Что же все это означает? Чтобы избежать проблем, отключите выбор роли и позвольте устройствам управлять собой самостоятельно, вместо того, чтобы применять политику.

Другие важные опции - inquiry scan и page scan. По умолчанию, устройства Bluetooth находятся в резервном режиме и периодически сканируют эфир. С page scan, устройство ожидает, что другие устройства войдут с ним в контакт посредством его кодового имени. Удаленное устройство должно знать это имя. inquiry scan - противоположный процесс; любое устройство может делать вызов, даже если оно не знает надлежащее кодовое имя. Класс позволяет вам искать любой тип устройства, когда вокруг слишком много устройств Bluetooth. Если вы хотите скрыть ваши устройства от других людей, отключите сканирование - или в hcid.conf, или вручную, после того, как вы подключили ваши устройства: Самая важная опция - конечно, опция безопасности.

Для создания соединения между двумя Bluetooth устройствами необходимо, чтобы у них был выставлен одинаковый PIN-код. Этот код может быть размером и 8 и 128 бит, но на сотовых телефонах или беспроводной гарнитуре, вам врядли захочется набирать что-то более чем "1234".

Когда одно из устройств посылает PIN, добавив к ему случайное число, принимающее устройство сравнивает его с имеющимся и в случае успеха создается ключ связи для защиты данного подключения. Для того, чтобы предотвратить радио-перехват, вам необходимо использовать аутентификацию и шифрацию.

Что касается безопасности, то используйте auto и напишите коротенький скрипт, выводящий PIN. Например: Это выведет "PIN:9874", когда вы выполните: Вы можете сделать данный скрипт более сложным, например, прося пользователя ввести определенный пароль каждый раз, когда пытается подключиться новое устройство. Это не входит в рамки данной статьи. Gnome и KDE уже обеспечивают графические bluepin приложения, не стесняйтесь улучшать их, если хотите.

Обратите внимание на режимы: hold - когда мастер отключается, входя в режим энергосбережения, или по какой другой причине (возможно, чтобы слушать в другом piconet или выполнить сканирование). sniff, когда подчиненное устройство время от времени засыпает, чтобы сохранить энергию. park - подчиненное устройство покидает piconet. Вы можете разбудить это устройство, указав мастеру распарковать его.

В самом общем случае, вы должны работать во всех этих режимах, если ваши аппаратные средства их поддерживают - а в настоящее время это именно так. Вы сбережете много энергии и получите больше возможностей. Старые устройства Bluetooth, такие как мое Socket CF+ Rev E (with a Nokia chipset, hci v 1.0b), поддерживает только некоторые из этих опцийи (Смотрите short introduction to the theoretical aspects behind a Bluetooth connection и hardware features.)

Теперь, когда пароль и все необходимые опции установлены, попробуем подключиться: Запустите демоны hcid и sdpd, обеспечивающие связь (например для получения PIN или запроса возможностей): В настоящий момент нет никакого эквивалента /etc/hosts, чтобы отображать адреса устройств в имена, поэтому придется использовать аппаратный адрес: Вы будете знать, что устройство требует пароля, если получите: Если устройство выключено, то сообщение будет выглядеть так: В случае успеха картина будет выглядеть примерно так: И теперь просмотрим записи в syslog, чтобы увидеть процесс обмена PINами и установку соединения:

Службы предложения и запроса

Вы нашли устройство. Что же можно с ним делать дальше? Можете ли вы использовать его для выхода в сеть, передачи файлов, прослушивания музыки? Это работа для протокола SDP - службы предложения и запроса. Что предлагает мой Zaurus? Судя по увиденному, никаких сервисов тут нет. Мне их необходимо добавить. NAP для работы сети, DUN для работы с PPP, OPUSH для передачи файлов и SP для того, чтобы иметь возможность использовать серийный порт другого устройства. Внимание! В этой статье у меня нет места, чтобы рассматривать настройку DUN, OPUSH и SP. Я только покажу, как подделать поддержку для этого профиля. Почему бы на этот раз не поиграть в притворщиков? Одним из плюсов такого подхода - организация honeypot и поиск в syslog устройств, обращающихся к этим сервисам для атак типа Bluesnarfing или Bluejacking.

Теперь посмотрим, что нам предлагает Zaurus: Намного лучше.

Теперь я хочу пробовать некоторую работу с сетями. Вообразите, что Zaurus имеет сетевое подключение к Интернету и вы хотели бы совместно использовать это подключение с другими устройствами. Это - IP по Bluetooth!

Запустите на Zaurus сетевой демон в серверном режиме: На своем компьютере выполните поиск NAP: Теперь убедимся в том, что Zaurus правильно обьявляет поддержку PAN. Подключимся с помощью pand в клиентском режиме: Также вы можете выполнить поиск серверов NAP: В этом случае каждое устройство будет иметь сетевой интерфейс bnep0, поддерживающее автоматическую конфигурацию - с DHCP или статическим IP

на Zaurus введите (и сохраните в /etc/bluetooth/pan/dev-up на потом): на PC введите (и сохраните в /etc/bluetooth/pan/dev-up на потом): Теперь вы можете пропинговать Zaurus и использовать это соединение для выхода в Интернет.

pand - это сетевой демон, который можно использовать для разных целей, включая работу с peer-to-peer сетями, если вы используете GN вместо NAP. На клиентской машине выполните: В этом случае будет осуществлятся поиск peer-to-peer серверов в то время, когда вы проходите мимо. Наряду с DHCP запросом на получение IP адреса для bnep0, появляются такие интересные возможности, как обмен файлами с прохожими, чьи устройства сконфигурированы подобным образом. Для получения дополнительной информации, обратитесь к The PAN HOWTO.

Заключение

В настоящий момент ваше устройство Bluetooth по функциональным возможностям только приблизилось к WiFi - возможно с более хорошими опциями и возможностями для автоматизации.

Даже просто работая в сети, можно получить больше с PAN в Bluetooth.