Как раздать gps с телефона
Этичный хакинг и тестирование на проникновение, информационная безопасность
Обычно настольные компьютеры и ноутбуки продаются без GPS чипа. Это можно объяснить тем, что стационарному устройству не нужно определять координаты. Тем не менее имеется несколько специализированных приложений, для которых нужен GPS, например: составление списка Точек Доступа Wi-Fi с их точными координатами. Конечно, можно купить внешний GPS приёмник, который обойдётся вам буквально в несколько долларов (от трёх долларов вместе с доставкой). Но есть ещё более бесплатный вариант — использовать GPS сенсор вашего телефона Android.
В этой статье я расскажу, как передавать данные GPS с телефона на Linux и как использовать GPS телефона для получения точных географических координат, для составления маршрута перемещения и в любых других приложениях для работы с GPS сигналом на Linux.
Протокол NMEA и демон GPS приёмников
Начнём с небольшой матчасти.
NMEA 0183 (от «National Marine Electronics Association») — стандарт определяющий текстовый протокол связи морского (как правило, навигационного) оборудования (или оборудования, используемого в поездах) между собой. Стал особенно популярен в связи с распространением GPS-приёмников, использующих этот стандарт.
Говоря простым языком, NMEA это способ передачи координат и другой сопутствующей информации в виде специально организованных данных, передающихся в виде простого текста. Пример строк NMEA:
Именно с использованием этого протокола мы будем отправлять GPS координаты с телефона на компьютер.
gpsd — это интерфейс демона для GPS приёмников. Дело в том, что GPS приёмники выводят данные в самом разном виде: некоторые из них поддерживают протокол NMEA, а некоторые используют свои собственные бинарные форматы. Если бы программы напрямую работали с GPS приёмниками, то каждой бы из них нужно было реализовывать поддержку каждого устройства. Для упрощения этой ситуации и используется gpsd, эта служба прослушивает входящие данные с GPS приёмников, причём поддерживает множество форматов и устройств. Служба gpsd автоматически определяет формат входящих данных, распознаёт их и делает доступными на сокете tcp://localhost:2947 (порт можно изменить в настройках) для любых программ в операционной системе. То есть если нужно, чтобы программа умела получать поток GPS данных, то достаточно в ней реализовать получение данных от tcp://localhost:2947 и понимание формата gpsd, и после этого программа сможет работать с большинством GPS приёмников!
В моём дистрибутиве следующие типы драйверов скомпилированы в gpsd:
- Экспорт сокетов
- Экспорт совместной памяти
- Экспорт DBUS
- Функции службы времени
- PPS
Как можно увидеть, многие устройства передают типы пакетов отличные от NMEA. Для некоторых устройств реализованы дополнительные функции подстройки переключения режима, скорости и темпа.
Как можно передать GPS данные на компьютер в реальном времени
Есть разные способы передавать данные от телефона в компьютер:
- Bluetooth
- USB
- по сети (Wi-Fi, Интернет)
Самый простой способ — по сети. Bluetooth и USB требуют дополнительной настройки.
Для передачи по сети нужно, чтобы у телефона был доступный с компьютера IP адрес — в локальной сети Wi-Fi это довольно просто. Если же вы вдалеке от Wi-Fi роутера, то можно использовать в качестве Точки Доступа сам телефон — в этом случае он также будет доступен по IP с ноутбука. Даже если телефон далеко от компьютера, он всё равно может передавать GPS данные не имея белого IP — но для этого нужно, чтобы оба устройства были подключены к одной VPN.
Программы для передачи GPS с телефона на компьютер
Следующая таблица взята отсюда. Я не знаю, насколько она актуальная — вполне возможно, что когда я это пишу и уж тем более когда вы это читаете, появились новые программы для этой функции — кстати, пишите их в комментариях, если вы знаете другие программы.
Имя | Через | TCP порт | Лицензия |
---|---|---|---|
ShareGPS | Bluetooth, USB | 50000 | бесплатная |
BlueNMEA | Bluetooth, USB | 4352 | бесплатная |
Solidsync Network/Bluetooth GPS | Bluetooth, Wifi | 25010 | 2.99 USD |
Symarctic ExtGPS | Bluetooth | бесплатная | |
Bluetooth GPS Output | Bluetooth | пробный период 10 минут или 0.92 USD | |
GPS 2 Bluetooth v.4 | Bluetooth | бесплатная, просто виджет |
Я буду использовать программу Share GPS — просто потому, то она шла первой по списку и у меня с ней всё получилось. Хотя нужно отметить, программа скорее условно бесплатная: бесплатно можно создать только одно подключение, к этому одному подключению может подсоединиться только одно устройство, некоторые продвинутые функции доступны только в премиум версии. Но для наших целей бесплатных возможностей предостаточно.
Как узнать IP адрес телефона
При отправке GPS данных телефон может выступать в качестве сервера, к которому мы подключаемся, либо может быть клиентом и подключаться в службе для передачи ей GPS потока. Первый вариант, когда телефон работает как сервер, является более простым. Нам нужно только знать локальный IP адрес телефона.
Если ваш телефон и компьютер находятся в одной локальной сети, например, подключены к одному роутеру по Wi-Fi, либо телефон подключён по Wi-Fi, а ноутбук по проводу, то локальный IP телефона можно посмотреть перейдя в свойства Wi-Fi подключения:
Если вы находитесь вдали от роутера, то вы можете использовать телефон как Точку Доступа — в этом случае:
- телефон и ноутбук окажутся вновь в одной локальной сети
- ноутбук сможет использовать Интернет подключение телефона (например, для загрузки карт)
В этом случае, самый простой способ у знать IP адрес телефона, это выполнить команду на ноутбуке:
То есть телефон в этой ситуации выступает в качестве роутера и предыдущей командой мы посмотрели IP адрес этого роутера, который оказался 192.168.43.1.
Как настроить Share GPS
На вкладке GPS STATUS вы можете просмотреть текущий статус и координаты GPS.
Переходим в CONNECTIONS и нажимаем кнопку ADD
Снимаем галочку Setup by Activity
Кликаем на Data Type
и выбираем Standard NMEA format
Нажимаем OK.
Нажимаем на Connection Method и выбираем Use TCP/IP to send NMEA GPS to PC. The IP addresses of the devices are known:
Придумываем и вводим любое имя для подключения:
Нажимаем кнопку NEXT.
Здесь можно изменить порт, который по умолчанию установлен на 50000. Меня устраивает стандартный порт, поэтому я просто нажимаю OK.
Когда всё готово, нажмите на подключение, чтобы активировать его. Если подключение перешло в статус Listening, значит ваш телефон готов для отправки GPS информации. Если статус Idle, то значит соединение не активно (не используется и не прослушивает порт).
Проверка поступающих GPS данных по протоколу NMEA
На самом деле, телефон будет работать как простейший веб-сервер, который будет отправлять поток данных в виде простого текста. Поэтому работу можно проверить, к примеру, командой curl (укажите IP вашего телефона, а также укажите правильный порт, если вы изменили порт по умолчанию, либо используете другую программу):
Предыдущая команда завершилась ошибкой:
Если пошёл поток данных, значит всё работает.
На телефоне статус поменялся на Connected.
Как запустить gpsd для получения GPS с телефона
Останавливаем предыдущую команду cURL, если вы этого ещё не сделали, поскольку в бесплатном варианте программа разрешает только одно подключение.
Теперь нужно установить gpsd.
В Debain, Kali Linux, Linux Mint, Ubuntu и их производные установка делается следующей командой:
В Arch Linux, BlackArch и их производные установка делается так:
Для запуска gpsd используйте команду (в ней замените IP адрес и порт на свои значения):
Опция -N нужна для того, чтобы служба не уходила в фон (не превращалась в демона). После отладки, когда вы убедитесь, что всё работает, опцию -N можно не использовать.
Если что-то не так — программа сразу завершает работу, либо работает, но в дальнейшем другие приложения не получают GPS информацию, то используйте опцию -D, после которой укажите число для увеличения уровня вербальности. Например, -D 1 для краткого вывода информации или -D 10 для очень подробного вывода:
Как проверить, работает ли gpsd
Даже после успешного запуска gpsd, визуально ничего не происходит. Для проверки, поступают ли данные от gpsd, запустите программу:
Эта программа будет показывать координаты, время, скорость, статус и другую сопутствующую информацию.
Карта на Linux для GPS. Запись трека движения на Linux по GPS
В качестве приложения, которое принимает GPS координаты и показывает расположение на карте, а также записывает путь движения, я буду использовать FoxtrotGPS — лёгкое и быстрое картографическое приложение.
FoxtrotGPS — это простое в использовании бесплатное приложение GPS/GIS с открытым исходным кодом, которое хорошо работает на небольших экранах и особенно подходит для сенсорного ввода. FoxtrotGPS находится в свободном доступе для публичного использования, распространения и изменения в соответствии с условиями GNU General Public License 2.0 (GPLv2).
Для установки FoxtrotGPS в Debain, Kali Linux, Linux Mint, Ubuntu и их производные выполните команду:
Для установки foxtrotgps в Arch Linux, BlackArch и их производные выполните команды:
Если служба gpsd запущена, то программа сразу покажет ваше расположение:
2. Полноэкранный режим (F11)
3. Увеличение карты
4. Уменьшение карты
5. Автоцентр на вашем расположении
6. Следующий репозиторий карт (поддерживается сразу несколько бесплатных карт!)
7. Предыдущий репозиторий карт
8. Включить запись маршрута
Настройка FoxtrotGPS
На первой вкладке настроек показывается
- текущая скорость
- средняя скорость
- максимальная скорость
- длина пути
- время записи трека
- данные GPS (координаты и время)
- количество видимых спутников
На следующей вкладке можно включить или отключить запись маршрута. Если нажать кнопку Split, то запись продолжится в новый файл.
На третьей вкладке настроек можно выбрать карту, систему единиц, подключить датчик сердечного ритма, а также поменять адрес и порт GPSD службы, если вы хотите использовать нестандартные значения.
Карта по умолчанию в FoxtrotGPS выглядит так:
В FoxtrotGPS вы можете выбрать спутликовый вид от Google:
Ещё есть такой вариант:
А одна из карт показывает на водяных знаках необходимость использовать API:
Симуляция работы GPS приёмника
Некоторые программы, например, Google Earth, по известным только им причинам не работают с GPSD — они пытаются сканировать систему в поисках приёмника GPS.
Примеры таких устройств:
- /dev/ttyS0 (serial device)
- /dev/ttyUSB0 (USB устройства)
- /dev/gpsd0 (Generic GPS device 0)
Вы можете имитировать работу таких устройств с помощью socat командами вида (IP, номера портов, а также номера устройств меняйте на свои):
В принципе, с таких устройств становится возможным считывать данные — я проверял с помощью программ cat и bettercap.
Но Google Earth у меня так и не заработала.
Если вы увидели какую-то ошибку в моих командах socat, либо вам удалось успешно работать с такими виртуальными устройствами в каких-либо программах, то просьба написать об этом в комментариях.
GPS в Bettercap
По умолчанию Bettercap использует устройство /dev/ttyUSB0 (можно поменять в настройках). Для того, чтобы симулировать будто бы GPS информация приходит от устройства /dev/ttyUSB0, запускаю следующую команду:
Затем запускаем Bettercap
Внутри сессии Bettercap включаем GPS модуль и выводим текущие координаты:
На моей системе эта команда успешно вывела информацию о координатах, качестве и количестве видимых спутников.
GPS в Kismet
Kismet стала известной как программа для сбора информации о беспроводных точках доступа, в том числе с их привязкой к GPS координатам. В настоящее время программа бурно развивается и поддерживает множество источников радиосигналов, в том числе:
Kismet может работать с разными источниками GPS, в том числе напрямую с GPS ресиверами или получая данные по сети.
Поддерживаемые типы GPS:
Пример настройки для получения данных от последовательного устройства:
Пример настройки для получения данных непосредственно из сети (можно подключиться к телефону вместо GPSD и получать поток GPS координат):
Пример настройки для считывания данных от GPSD службы:
GPS приёмники для ноутбука
Если вам нужен внешний GPS приёмник для вашего ноутбука или компьютера, который вы можете подключить по USB и получать текущие координаты независимо от телефона, то вы можете выбрать любое из следующих устройств, благо цены на них невысокие:
- BEITIAN BS-71U (поддерживает NMEA-0183)
- BEITIAN BS-70U (поддерживает NMEA-0183)
- BN-808 USB GPS Receiver (поддерживает NMEA-0183)
- BT-708 GPS Receiver (поддерживает NMEA-0183)
- BU353S4 (поддерживает NMEA-0183)
- VK-172
- VK-162
- gps usb receiver
Автоматический запуск службы GPSD с опциями и на определённом устройстве
При желании, вы можете выполнить настройку службы GPSD в файле /etc/default/gpsd:
Укажите опции как значение GPSD_OPTIONS, а желаемое устройство, в том числе вида tcp://*, укажите в качестве значения DEVICES.
Для запуска в фоне службы:
Для включения автоматического запуска gpsd при каждой загрузке компьютера:
Всем привет! У многих наверняка есть ноутбуки и планшеты на Windows, где по каким-либо причинам необходимо подключение GPS, а внешний приемник покупать не хочется. И сегодня я расскажу как выйти из этой ситуации и настроить GPS-навигацию на таких переносных устройствах через обычный смартфон, который должен иметь GPS и Bluetooth. Все скрины кликабельны!
На смартфон требуется скачать с Google Play приложение под названием GPS over BT и устанавливаем его. Включаем блютус и GPS или делаем это в самом приложении после его запуска. На экране мы видим текущее точное время, координаты в двух формах, высота над уровнем моря, вашу скорость передвижения, азимут, расстояния.
Также если нажать кнопку меню, то можно перейти к просмотру спутников.
На ПК необходимо также наличие Bluetooth, иначе подсоеденить никак у вас не получится. Обычно в ноутбуках он бывает сразу.
Такой метод работает с таким навигационным софтом, как OziExplorer, SasPlanet, 2Gis, Google Earth и другими. А покажу я вам работу на примере САС Планеты и Озика.
Так, что-то я отвлекся от процесса 🙂 , связываем далее!
Это окошко закрывается и в списке COM-портов мы видим наш свежесозданный, которому присвоилось значение COM6. Запомните эту цифру. Она еще пригодится. Эти оба окна можно закрыть.
Открываем нашу любимую SAS Planet и переходим в настройки.
Так она показывает местоположение на топокарте:
Далее открываем карту, и кликаем по волшебной кнопке с молнией. И появилась стрелочка, указывающая на ваше местоположение. Теперь с этой прогой мы можем работать полноценно!
Что же надо было сделать?
TCP/IP соединение
Соединение было организовано с помощью Revers wired tether, для этого на телефоне были, получены права root и с помощью программки android-wired-tether было создано TCP/IP подключение к ПК. Почему же не по WiFi? Да, такая возможность есть, можно на windows 7 создать виртуальный WiFi адаптер и к нему уже подключится с Android’a. Но мой адаптер Atheros AR5B95 через 5 минут подключения уводил систему в синий экран, поэтому и было решено создать подключение все же по проводу + по нему еще и зарядка устройства происходит, что не мало важно при работе GPS(оно прожорливо в плане питания).
NMEA данные с Android, получение и отправка
Данные на Android получались следующим кодом:
//NMEA listener
LocationManager LM = (LocationManager) getSystemService(Context.LOCATION_SERVICE); ((LocationManager)getSystemService(Context.LOCATION_SERVICE)).requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,new LocationListener() <
@Override
public void onLocationChanged(Location loc) <>
@Override
public void onProviderDisabled(String provider) <>
@Override
public void onProviderEnabled(String provider) <>
@Override
public void onStatusChanged(String provider, int status,Bundle extras) <> >);
LM.addNmeaListener(new GpsStatus.NmeaListener() public void onNmeaReceived(long timestamp, String nmea) SendNmea2UDP(nmea);
>>);
И передавались в метод SendNmea2UDP который отправлял их на UDP порт ПК:
public void SendNmea2UDP(String nmeastring)
<
message = nmeastring;
msg_length=message.length();
messageB = message.getBytes();
nmeapacket = new DatagramPacket(messageB, msg_length,local,server_port);
try
socket.send(nmeapacket);
>
catch(Exception e) <>
>
NMEA данные на ПК
Заключение
Если кому интересен исходный код программ, то он тут на Android и Windows
В итоге можно запустить программу, которая понимает NMEA данные с COM порта:
В низу справа программка, которая принимает UDP с Android’a и передает NMEA далее на виртуальный COM порт. Программка upd2com отправляет на 3 порт, а к примеру в данном случае SASПланета принимает с 4 порта (организовано это с помощью VSPE). Красненькая точка это где я сейчас тестирую все это.
Спасибо за внимание, надеюсь, статья была вам интересна.
Недавно почувствовал себя настоящим джиппером.
Ведь известно, что каждый настоящий джиппер даже по городу ездит с топографическими картами.
Поскольку кроилово — любимое занятие каждого нивавода, а кроилово всегда, как известно, ведёт к попадалову, посчастливилось мне купить дешёвый российский планшет Explay на Андроиде. Плохой, негодный планшет, с мерцающим монитором, маленьким количеством оперативной памяти, и, что хуже всего — неработающим GPS.
Вернее как — иногда он таки находит спутники, но зачастую можно потратить многие часы, а спутники так и не будут найдены.
Cтрадают этим, впрочем, и более дорогие марки, например — LG. Было у нас в семье два совершенно одинаковых телефона одной модели, но один исправно находил спутники и радовал стабильной работой, а второй спутники не находил, что с ним не делай. Возможно, это зависит от прошивки, хотя может быть, что и какая-то серия чипов бракованная.
Так или иначе, эту задачу я решил попробовать решить извращённым способом, передавая данные NMEA на планшет со смартфона по Bluetooth. Для этого на передающем устройстве надо установить программу ShareGPS или аналог, а на принимающем — Bluetooth GPS или аналог.
Результат — система действительно работает. Смартфон передает данные NMEA и при этом нормально пользуется ими сам. Но подключение по Bluetooth ужасно неудобное. Если оно один раз оборвётся, придётся перезапускать оба устройства: простое выключение Bluetooth не помогает. А соединение обрывается, если перевести телефон в ждущий режим (нажать на кнопку питания) или просто так, если слишком долго работает. Но если очень надо сориентироваться в лесу — то это вполне рабочий вариант.
Вердикт — гладко на бумаге, но забыли про овраги. Хочу попробовать повторить фокус, но с передачей данных через Wi-Fi.
А топографические карты — это круто, прикольно и интересно. :) На прошедших выходных мы использовали их в качестве развлечения в нашей поездке в Саранск, но это совершенно другая история, о которой скоро выложу отчёт. Оставайтесь с нами. :)
Читайте также: