Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #71, НОЯБРЬ 2004 г.

Мобильные юниксы vol. 3

Anton Karpov

Хакер, номер #071, стр. 071-098-4


Мобильный интернет

Для того чтобы применять телефон в качестве модема для доступа в интернет, нужно настроить ppp(8) или pppd(8), и единственная проблема заключается в том, чтобы мобильник был опознан этими демонами как модем на каком-либо порту. Благодаря эмуляции через драйвера ucom, ucycom, uplcom или uvscom, подключенный через USB-кабель телефон выступает в роли некоего девайса на последовательном порту. В случае с Bluetooth, по сути, ничего не меняется, только сэмулировать порт чуть сложнее. Пожалуй, самый простой способ - использование rfcomm_sppd(1) для эмуляции последовательного порта и передачи ppp-фреймов через RFCOMM-каналы:

# rfcomm_sppd -a 00:01:e2:3f:c5:9a -b -t /dev/ttyp4

После чего для pppd(8) в /etc/ppp/options следует указать /dev/ttyp4 как порт модема и все волшебным образом заработает :). Разумеется, данным трюком можно обходиться и при использовании ppp(8). В этом случае порт можно вообще не указывать, употребив в конфиге /etc/ppp/ppp.conf следующую конструкцию:

set device "!/usr/bin/rfcomm_sppd -a 00:01:e2:3f:c5:9a"

В данном случае девайс создается на лету самим ppp, что очень удобно. Альтернативный способ - применение rfcomm_pppd(8) совместно с ppp:

# rfcomm_pppd -a 00:01:e2:3f:c5:9a -c -C DUN -l gprs

Как и везде, -a указывает BD_ADDR мобильника, -C DUN указывает использование Dialup-Networking канала (если канал определить данным образом, а не напрямую, по номеру, то номер будет запрошен по протоколу SDP), -l gprs указывает на существующую запись в ppp.conf, ее ты должен создать заранее, прописав обычные настройки для GPRS твоего оператора.

Зачем же две утилиты для одной и той же задачи? Дело в том, что с помощью rfcomm_pppd(8) можно не только употреблять мобильный девайс как модем, но и предоставить этому девайсу доступ в локальную сеть. Для сотового телефона это, ясное дело, неактуально, но ведь Bluetooth встраивают во многие другие мобильные устройства. В ppp.conf нужно внести новую запись rfcomm-server (обратись к man rfcomm_pppd за примерами) и запустить rfcomm_pppd как сервер, точно так же, как грузили obexapp в серверном режиме:

# rfcomm_pppd -s -C 7 -l rfcomm-server

Bluetooth и Linux

В Linux с Bluetooth, как и со всем остальным, относительная неразбериха в виде проектов-патчкитов. Существует несколько реализаций BT-стэка, но самый популярный - BlueZ (www.bluez.org). Его ядерная часть была смержена в vanilla kernel (официальное, чистое ядро с kernel.org) где-то во времена 2.4.20.

Необходимые опции ядра

CONFIG_BLUEZ=m

CONFIG_BLUEZ_L2CAP=m

CONFIG_BLUEZ_SCO=m

CONFIG_BLUEZ_RFCOMM=m

CONFIG_BLUEZ_RFCOMM_TTY=y

CONFIG_BLUEZ_HCIUSB=m

Но библиотеки и утилиты все равно следует собирать из исходников с bluez.org или поставить из пакетов своего дистрибутива. Необходимые тарболлы - bluez-libs и bluez-utils. Обнаружить мобильник можно с помощью утилиты hcitool (hcitool scan). Аналог sdpcontrol для обнаружения сервисов девайса называется sdptool (sdptool browse BD_ADDR). После определения BD_ADDR можно забиндить девайс на эмуляцию порта (/dev/ircomm0):

Назад на стр. 071-098-3  Содержание  Вперед на стр. 071-098-5