В этом посте мы с вами поговорим о том, как получить доступ к Linux'овой консоли модема, а также как установить патч TTL=64. Изначально пост задумывался как подробнейшее руководство на тему, но т.к. существует немалый риск того, что многие прочитав его, ввиду отсутствия опыта приведут свои устройства в состояние полной неработоспособности - некоторые подробности я все же опущу. Итак, для чего это было нужно лично мне? Во-первых для того чтобы вспомнить как работать с модемами на Balong'е, благо на эту тему есть уже очень много материалов любезно предоставленных vve, forth32, rust3028, Matrixnet и другими, ну а во-вторых - т.к. у меня совершенно случайно оказался Altel'евский Huawei E8372, который вы можете видеть на фото - я захотел его использовать для раздачи интернета через WiFi на головное устройство в автомобиле. Как раз под рукой оказалась телефонная симка Yota. На тему tethering'а Yota'ы уже достаточно много было сказано, поэтому повторяться здесь тоже не буду. Не то чтобы я собрался качать торренты гигабайтами, как вы понимаете в авто - это не нужно, просто я захотел попробовать использовать телефонную SIM (к сожалению, головное устройство не поддерживает установку SIM-карты, хоть и на Android). Вообщем начнем ...
Что нам понадобится? Собственно модем - Huawei E8372, прямые руки, светлая голова и так называемый OEM Code (как раз он нам понадобится для получения доступа к консоли модема). Если вы не представляете где взять этот код - дальше можно не читать, т.к. как раз этот момент я и опущу здесь. Если он у вас уже есть - можно приступать. Итак, первое что нам нужно сделать - это перевести модем из режима HiLink, в котором у нас доступен один лишь интерфейс RNDIS в режим COM-портов. Сделать это можно отправив XML POST запрос следующего содержания на http://192.168.8.1/CGI :
Что нам понадобится? Собственно модем - Huawei E8372, прямые руки, светлая голова и так называемый OEM Code (как раз он нам понадобится для получения доступа к консоли модема). Если вы не представляете где взять этот код - дальше можно не читать, т.к. как раз этот момент я и опущу здесь. Если он у вас уже есть - можно приступать. Итак, первое что нам нужно сделать - это перевести модем из режима HiLink, в котором у нас доступен один лишь интерфейс RNDIS в режим COM-портов. Сделать это можно отправив XML POST запрос следующего содержания на http://192.168.8.1/CGI :
<?xml version="1.0" encoding="UTF-8" ?> <api version="1.0"> <header> <function>switchMode</function> </header> <body> <request> <switchType>1</switchType> </request> </body> </api>Сделать это можно с помощью curl (в конце статьи я выложу архив со всем необходимым), запустив файл sw_debug_mode.cmd из архива. Модем, естественно при этом должен быть подключен по USB. В результате в диспетчере устройств у нас появятся следующие устройства:
Как видите, драйвера на них не установились автоматически, поэтому если в системе нет драйверов Huawei устанавливаем их вручную из архива FcSerialDrv.rar или Huawei_Drivers.rar (эти два архива также содержатся в конце поста в общем архиве с материалами).У меня Win 8.1 x64 и драйвера из FcSerialDrv.rar успешно установились (у кого не устанавливаются - можно попробовать отключить обязательную проверку цифровой подписи драйверов, хотя лично я не отключал). В результате из этой мешанины устройств получилось следующее:
Как мы видим здесь 6 COM-портов и 1 RNDIS адаптер. Далее нас интересует командный порт, а именно PC UI Interface (COM 40). Берем PuTTy, включаем в нем режим локального эха для удобства и коннектимся (тип соединения - Serial) на COM40. Проверяем результат командой ATI:
Далее, как я уже говорил - нам понадобится OEM Code. В моем случае это был - 62265683 (не путать с кодом разблокировки модема). OEM Code для Huawei E8372 невозможно посчитать различными калькуляторами, которые генерируют коды по IMEI, поэтому не тратьте свое время впустую. Вводим последовательно следующие команды:
AT^DATALOCK="62265683" AT^SPWORD="62265683" AT^SHELL=2 AT^RESET
После чего модем у нас уходит в перезагрузку. Результатом ввода каждой из команд должно быть OK. Здесь DATALOCK - открывает доступ к расширенному набору команд, без нее, к примеру, нельзя ввести SPWORD. Далее активируем консоль с помощью SPWORD и SHELL и ждем перезагрузки модема. После рестарта он опять у нас окажется в HiLink режиме, в котором доступен только RNDIS. Переведем его в Debug Mode с помощью sw_debug_mode.cmd, как мы это уже делали раньше. И подключимся на FC ShallB (COM 41) с помощью Putty:
Далее в окне терминала появятся строчки из лога. Просто нажимаем Enter и видим следующие строки:
Password length is 0, ERR!Login failed
Т.е. по факту у нас запрашивался пароль, но мы этого не видели. В приглашение Password вводим наш OEM Code, все тот же 62265683 в моем случае и видим приглашение EUAP> - это и есть консоль Linux модема. Теперь выполним в ней следующие три команды:
busybox telnetd -l /bin/sh mount -o remount,rw /system /system/bin/busybox tcpsvd -vE 0.0.0.0 21 /system/bin/busybox ftpd -w / &
Запускаем telnet демон (теперь мы можем получить доступ к той же консоли через telnet по 192.168.8.1), монтируем раздел /system на запись и запускаем FTP клиента с возможностью загрузки файлов. Теперь чтобы не повторять все это вручную миллион раз, если вдруг понадобится, мы можем добавить запуск busybox telnetd -l /bin/sh в файл /system/etc/autorun.sh , для меня, например, удобнее всего было сделать это через Far Manager 3.0 и FTP плагин в NetBox'е:
Пример моего autorun.sh, который у меня получился в конечном итоге - вы также сможете найти в архиве в конце этой статьи. К слову, в модеме в /sbin лежит adbd демон, но он не запускается, выпадая с Illegal Instruction. Поэтому мы возьмем adbd от E3372s и зальем его в /system/xbin выставив соответствующим образом права (chmod 750 adbd) и владельца (chown 0:0 adbd), чтобы получилось как на скрине:
Здесь правильная версия adbd с размером в 117968 байт у нас лежит в /system/xbin ... права на нее выставлены 750, владелец - root. Если внести его в autorun.sh, то при старте модема можно будет очень легко подключиться к нему по ADB:
Правильный файл adbd опять же в архиве в конце поста ;) Теперь что касается TTL, если применить патч, по аналогии с E3372S / E3372H, т.е. добавить в autorun.sh следующее:
iptables -P FORWARD DROP ... (тут пропущено) ... f=0 while [ $f -eq 0 ] do dmesg | /system/bin/busybox grep "wan0: port 1(eth_x) entered forwarding state" if [ $? -eq 0 ] then /system/bin/sleep 15 iptables -t mangle -A POSTROUTING -o wan0 -j TTL --ttl-set 64 iptables -P FORWARD ACCEPT f=1 else /system/bin/sleep 3 fi doneТо ничего у нас не получится, хотя по логике вещей все верно. Если сделать iptables -t mangle -L POSTROUTING -v и посмотреть статистику, то пакеты у нас якобы модифицируются:
И TTL при выходе во вне у них должен быть 64 ... однако на практике происходит то же самое что и с Huawei E5372 (ZeroChaos и Matrixnet на 4PDA в свое время уделили очень много времени этой проблеме - но нашли только "промежуточное" решение, которое заключалось не в изменении всех выходящих пакетов, а в установке TTL по-умолчанию самого роутера в 63 с помощью busybox echo 63 > /proc/sys/net/ipv4/ip_default_ttl ... в результате любые Android устройства, которые подключаются к нему через WiFi - работают нормально, т.к. дефолтный TTL на большинстве Android устройств - 64, а на всех ПК, которые планируются подключать к роутеру необходимо также изменить DefaultTTL в реестре на 64) ...
Вообщем правило iptables -t mangle -A POSTROUTING -o wan0 -j TTL --ttl-set 64 в E8372 работает "через раз" и в результате часть пакетов все равно уходит во-вне с неизменным TTL, т.е. фиксации TTL для любых исходящих пакетов с wan0 не получается. Кто осилит полностью 43 страницы этой темы, получит более подробное представление.
В конечном итоге, чтобы не мучиться, получился патч, аналогичный этому для Huawei E5372. Его минус в том, что все подключенные к модему устройства должны иметь собственный DefaultTTL = 64.
Т.е. получаем Вариант №3 с картинки:
из этой - Обход ограничений раздачи мобильного интернета Yota темы.
Как и обещал, архив 8372_mod.7z со всеми необходимыми файлами.
p.s. В качестве небольшого резюме. Что получилось в итоге? Модем с дефолтным TTL=63, любые устройства на Android (и не только), имеющие DefaultTTL=64 подключаются к интернет без каких-либо проблем, в том числе и головное устройство в авто, ради которого все это и затевалось. Пост написан исключительно в образовательных целях, отвечать на вопросы где взять OEM code под ваш модем, что делать с IMEI и т.п. - я не буду. Вся информация на эту тему есть в открытых источниках. Комментарии с подобными вопросами также не будут публиковаться.
Внимание! Материалы приведенные в данной статье размещены в ознакомительных целях. Все действия описанные в данной статье вы осуществляете на свой страх и риск! Автор(ы) статьи не несут ответственности за вышедшее из строя оборудование, в результате ошибочных действий или неверного понимания вами смысла изложенного в ней материала, а также в силу любых прямых и косвенных причин, которые потенциально могут привести к неработоспособности вашего устройства или любым другим проблемам с ним. Если вы не уверены в своих силах, сомневаетесь и т.п. - не выполняйте ничего из вышеописанного. Используя материалы из этой статьи вы соглашаетесь с тем, что ответственность за ваши действия несете вы и только вы.