- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF143:AR Drone
Материал из Linuxformat.
- Дрон на Linux
Содержание |
Мы посмотрим, что внутри АR.Drone
- Это диво-квадрикоптер – самая компактная и простейшая из летающих копий Linux. Как понял Грэм Уэлдон, с ним еще и прикольно.
АR.Drone от Parrot добился колоссальных успехов с момента выпуска в сентябре 2010 года, и постоянно поражает игровые сообщества и сообщества разработчиков. Более того, покопавшись в нем, мы обнаружили, что AR.Drone работает под Linux. Здесь мы рассмотрим, что делает этот гаджет.
Подключить его к вашему компьютеру очень легко, потому что это устройство Wi-Fi. Как таковое, он выглядит специальной сетью, к которой затем можно присоединиться с любого компьютера, имеющего беспроводную сетевую карту. Отметим, однако, что если вы уже соединили его с мобильным устройством, IP-адрес не будет назначаться при подключении к сети, и к нему невозможно будет подсоединиться. Чтобы обойти эту проблему, запустите мобильное устройство и отключите функцию спаривания в настройках приложения Free Flight, или просто нажмите кнопку Разорвать пару [Unpair] на устройстве.
Итак, что мы можем почерпнуть из этой игрушки, не разбирая ее на части? Так как мы в его сети и знаем его IP-адрес, сканирование портов будет хорошей отправной точкой. Выполнив это, мы узнаем, какие порты открыты и доступны, а также, вероятно, поймем, какой доступ мы получим для подключения к устройству.
Запуск nmap показал два интересующих нас порта:
21/tcp open ftp 23/tcp open telnet
Попытавшись установить подключение к свободному порту telnet, мы попадем в Bash без необходимости ввода пароля. Информация по входу показывает, что нам удалось подключиться к установке Linux c BusyBox и что есть доступный номер версии, поэтому мы можем проверить интимные подробности и во просы безопасности, если это необходимо.
Дальнейшее рассмотрение показывает, что нас на самом деле непринужденно сбросили под root без пароля, и мы получили полный доступ к устройству.
# echo $USER root
Как-то уж слишком легко. Леденею при мысли, что кто-то по соседству может подсоединиться к сети с нетбука и поубивать процессы, пока я буду парить на квадрикоптере в небесах.
Обзор оборудования
Давайте взглянем на информацию по процессору и памяти:
# cat /proc/cpuinfo Processor: ARM926EJ-S rev 5 (v5l) BogoMIPS: 233.47 Features: swp half thumb fastmult edsp java CPU implementer: 0x41 CPU architecture: 5TEJ CPU variant: 0x0 CPU part: 0x926 CPU revision: 5 Cache type: write-back Cache clean: cp15 c7 ops Cache lockdown: format C Cache format: Harvard I size: 32768 I assoc: 4 I line length: 32 I sets: 256 D size: 16384 D assoc: 4 D line length: 32 D sets: 128 Hardware: Mykonos Parrot platform Revision: 0904 Serial: 0000000000000000
А также информация относительно памяти:
# cat /proc/meminfo MemTotal: 126072 kB MemFree: 105652 kB Buffers: 0 kB Cached: 3604 kB
Здесь 128 МБ оперативной памяти на борту – немного больше, чем вы ожидаете найти на столь маленькой штучке. Памяти и вычислительной мощности хватает для достойного встроенного устройства, и мы знаем, что на нем как минимум работают демоны FTP и telnet. Пора просмотреть полный список процессов и увидеть, что еще есть внутри.
Подберемся поближе
Взглянув на список запущенных процессов, мы найдем не так уж много полезных для нас, но среди них есть демон FTP, а также Telnet, DHCP-сервер и syslogger. Кроме того, есть два интересных процесса, которые выглядят специфичными для этого устройства, и, глядя на полный список всех запущенных процессов, можно заключить, что один из них отвечает за обработку всех элементов управления и вывода видео обратно на ваше мобильное устройство. Соответствующая информация здесь приводится ниже:
960 root 2736 S /bin/sh /bin/check_update.sh 961 root 11824 S /bin/program.elf
С виду этот процесс program.elf похож на хостинг основного кода устройства. Здесь недоступен исходный код, и он, вероятно, был прикомпилирован к материнской плате, чтобы закрыть исходный код от пользователей.
Процесс check_update.sh выглядит доступным для чтения – почитаем его, запустив vi или cat:
# cat /bin/check_update.sh
Похоже, что он контролирует каталог прошивки в поисках новых версий для обновления. Итак, остался только один процесс – program.elf. Он, вероятно, отвечает за всю коммуникацию и взаимодействие с мобильными устройствами.
По выдаче от netstat мы увидим, есть ли открытые порты, и если да, то какие и к какому адресу они привязаны. Старый добрый netstat отлично подходит для отслеживания используемого приложением порта и отладки сетевых проблем. Давайте посмотрим, что тут можно найти.
Команда netstat -р показывает, что у нас есть открытый порт TCP на 5559 и три UDP-порта – 5554, 5555 и 5556, все принадлежащие процессу program.elf. С учетом функциональности AR.Drone, на это есть целый ряд возможных причин. Один порт нужен для управления самим устройством, еще два – для видеоканалов передней и нижней камер. Это охватывает UDP-порты, но чтобы более точно определить, для чего какой порт предназначается, следует смотреть более пристально.
Примечательно, что единственным механизмом безопасности, встроенным в устройство, является техника спаривания устройств, доступная в настройках приложения: Free Flight. Ее нужно включать для предотвращения вредных хулиганов по Wi-Fi, которые могут захватить контроль над устройством, когда оно находится в полете.
Высокий полет
AR.Drone великолепно оборудован – имеет встроенный Linux, много оперативной памяти и надежную механическую часть для обеспечения полета. То, что на самом деле открывает ряд возможностей для этой удивительно захватывающей игрушки, доступно на встроенной установке Linux BusyBox. С копией Linux, летающей под вашим контролем, вы получаете возможность делать много необычных вещей.
Выполняя простые сканирования портов и проверки открытых портов и процессов, можно передавать пакеты туда и обратно в устройство, что потенциально позволяет создавать потоковое видео и механизмы контроля, которые используются на выбранном языке или платформе.
Чего бы я ожидал от сообщества AR.Drone в будущем – это основное приложение с открытым кодом для управления устройством. Это открыло бы железо на использование любого варианта Linux. А пока что это одна из слабых сторон, которая не должна мешать развитию одной из самых увлекательных современных игрушек.