Апр 14, 2015
Обходим ГЛОНАСС контроль, часть 2
Учимся разговривать с коробками
Дано: Гранит Навигатор 4.14
Задача: Наладить общение
Агрегат на вид симпатичный... компактный... ЗАО "Сантэл-Навигация" отдельный респект за эстетику. Но, ввиду отсутствия независимого источника питания, коробка пригодна только для локального использования. Государственные надзорные службы её сольют. Это было лирическое отступление:)
Погнали.
Для начала (знаю, в России не принято), не плохо было бы ознакомиться с мануалами. Идём на эфтипишник производителя: ftp://testuser:testuser@95.163.85.128 Забираем документацию, утилиту для прошивки Redum Tools, драйвера и сваливаем из секретного места:)
Теперь нам надо настроить коробку под себя. Запускаем Parallels с православным Windows XP... Ну, потому что нет других компьютеров, кроме Макинтоша. Ставим Redum Tools, подаём питание на коробку (на провод «зажигания» в том числе), ждём пока чудо агрегат загрузится, втыкаем мини-юсб, долго и упорно, в лучших традициях мастдая, пытаемся втюхать системе нужный драйвер. Ииии... вот оно! Настройки! Меняем айпишник, порт на свои, предварительно записав дефолтные, они нам пригодятся. Протокол ndtp_v6, будем работать именно с ним, как с официально утверждённым. Сохраняем. Вставляем в девайс рабочую сим-карту с оплаченными инторнетами, ребутим, выносим на солнце:) С коробкой всё; она стучится в нашу сторону.
Осталось открыть нужный порт на роутере и пробросить его на рабочую машину, лучше в то же место, чтобы не путаться. У меня это 4900 порт.
Ок. Всё готово для конструктивного диалога с космосом. Можно начинать общение. Вообще, в сети есть документ для алкоголиков, который описывает протокол передачи данных. Что странно. В теории, эта информация носит закрытый характер. По-этому, не подглядываем. Когда зайдём в тупик, тогда будем посмотреть:)
И так, послушаем коробку. Быстро пишем серверную часть на каком-нибудь научно-популярном языке. Первое, что придёт в голову, для экономии времени. Мы ленивы, не забываем:) Пусть это будет Python.
#coding: utf-8
import socket # импортируем модуль socket
sock = socket.socket() # создаём сокет в переменной sock
sock.bind(('', 4900)) # связываем sock с 4900 портом
sock.listen(1) # слушаем кого-нибудь одного
conn, addr = sock.accept() # принимаем соединение
print 'Connected:', addr # ой, кто же там?
data = conn.recv(1024) # получаем 1024 байта данных
hdata = data.encode('hex') # делаем из бинарных данных human friendly
print 'Data:', hdata # смотрим, что получили
conn.send(b'Hi! You slaves of mechanical boxes.') # Обзываем живущих на той стороне рабами
conn.close() # сливаемся, пока не наваляли
Открываем терминал. Запускаем:
$ python blablabla.py
Получаем...
Connected: ('217.66.157.0', 13233)
Data: 7e7e1c00020050e60200000000000000006400010000000000060002000200b22602000004000000000000
Понятно, что ничего не понятно... Можно долго посылать в ответ матюги с конфетами, но партизан, кроме этого, ничего не скажет. Надо включать фантазию:)
На сегодня задача выполнена. Связь налажена. Идём собираться с мыслями под чашку крепкого кофе.