Мобильные юниксы vol. 3 Anton Karpov Хакер, номер #071, стр. 071-098-3 Свистелки, пищалки, звонилки Как известно, Bluetooth оперирует понятием сервиса (см. министатью), и каждое взаимодействие девайсов - заливка картинок с телефона, использование модема и т.п. - это использование предоставленного сервиса. Информация о сервисах, поддерживаемых устройством, передается по протоколу SDP (Service Discovery Protocol). Узнать, что предоставляет тебе твоя мобила, можно с помощью утилиты sdpcontrol(8): # sdpcontrol -a 00:01:e2:3f:c5:9a browse Кстати, если ты уже сопоставил своему девайсу запись в hcsecd.conf, то вместо BD_ADDR везде можно писать его имя. Вывод этой команды весьма велик, но ты наверняка увидишь там строчки вроде этих: Dial-Up Networking (0x1103), Generic Networking (0x1201), OBEX File Transfer (0x1106), L2CAP (0x0100), RFCOMM (0x0003). OBEX - протокол передачи файлов с помощью Bluetooth. RFCOMM - протокол соединения устройств, позволяющий эмулировать последовательные порты, необходимые для использования мобилы как модема и инкапсуляции ppp-фреймов с помощью протокола L2CAP. Поддержка этих протоколов нам и понадобится. Но наша FreeBSD-станция должна и сама предоставлять мобильным устройствам указанный круг сервисов. Для этого необходимо запустить демон sdpd(8), принимающий запросы девайсов. Не имея ни конфига, ни особенных параметров, запускается он нехитро: # sdpd Для того чтобы передавать файлы на мобилу и с нее, нам понадобится утилита obexapp(1), которую можно найти в коллекции портов FreeBSD (/usr/ports/comms/obexapp). Она может работать в режиме как клиента, так и сервера. Чтобы слить файл с мобилы на комп, на последнем нужно запустить obexapp(8) в режиме сервера: # obexapp -s -C 1 Флаг -s означает, что утилита запущена как сервер, -C 1 указывает, что сервер зарегистрировал себя на первом RFCOMM-канале. Теперь при попытке отправить файл с мобилы sdpd(8) в ответ на запрос трубы о передаче информации обнаружит сервисную запись и сообщит о том, что искомый сервис слушает на первом RFCOMM-канале. Переданный файл по умолчанию падает в каталог /var/spool/obex. Разумеется, можно отправить файл в обратную сторону - с ноутбука на трубу. Для этого используется obexapp в интерактивном режиме: # obexapp -c -a 00:01:e2:3f:c5:9a -C FTRN obex> put put: local file> wallpaper.gif put: remote file> wallpaper.gif Success, response: OK, Success (0x20) Флаг -c указывает использование opexapp в клиентском режиме, -a BD_ADDR - адрес удаленного устройства (мобилы). Напоминаю, что можно указывать сразу имя устройства, сопоставленное данному адресу. -C FTRN указывает канал, но не по номеру, а по имени сервиса (FTRN - File Transfer), что также допускается. Любители пищалок и свистелок типа KDE/GNOME могут возмутиться вопиющей аскетичности утилиты - неужели все делается пошагово, через command line? Где же удобная приблуда в Konqueror/Nautilus для передачи файлов drag'n'drop'ом?! Она существует - это проект KDE Bluetooth Framework на kde-bluetooth.sf.net и GNOME Bluetooth для любителей Гнома на usefulinc.com/software/gnome-bluetooth/. Однако настоящим юниксоидам важно другое - obexapp может также использоваться в неинтерактивном режиме, что позволяет легко вызывать его из скриптов. |