Skip to content
Open
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
5dabc4e
Add using hotplug, init.d and procd OpenWrt system. Do not more need …
ilya-fedin Oct 16, 2016
ad6b1a8
fixes and new features
ilya-fedin Oct 17, 2016
b273a7e
New files
ilya-fedin Oct 17, 2016
d66e8fa
readme fix
ilya-fedin Oct 17, 2016
75455ef
readme fix
ilya-fedin Oct 17, 2016
1f70e4c
readme fix
ilya-fedin Oct 17, 2016
cf5c087
readme fix
ilya-fedin Oct 17, 2016
29f565a
readme fix
ilya-fedin Oct 17, 2016
6c8fe6a
readme fix
ilya-fedin Oct 17, 2016
f15c681
readme fix
ilya-fedin Oct 17, 2016
bdc0aed
readme fix
ilya-fedin Oct 17, 2016
4f305e3
readme fix
ilya-fedin Oct 17, 2016
db0800b
readme fix
ilya-fedin Oct 17, 2016
533da43
readme fix
ilya-fedin Oct 17, 2016
61fa47f
readme fix
ilya-fedin Oct 17, 2016
fb8db67
readme fix
ilya-fedin Oct 17, 2016
250ddec
readme fix
ilya-fedin Oct 17, 2016
55d51b2
readme fix
ilya-fedin Oct 17, 2016
a36c1a2
more info
ilya-fedin Oct 17, 2016
5c869f9
for completion
ilya-fedin Oct 17, 2016
68b5724
Scripts for Huawei HiLink, simplify scripts from @derlaft and ReadMe
ilya-fedin Oct 17, 2016
7399cae
readme fix
ilya-fedin Oct 17, 2016
4d1d306
readme fix
ilya-fedin Oct 17, 2016
d875a56
small update
ilya-fedin Oct 18, 2016
c33bc2d
add windows adb
ilya-fedin Oct 18, 2016
c550f90
fix windows scripts
ilya-fedin Oct 19, 2016
cb5f8e9
bugfix and mf910
ilya-fedin Oct 19, 2016
d48d6d3
Bugfix
ilya-fedin Oct 19, 2016
6802ea5
mf910 in header
ilya-fedin Oct 19, 2016
29fb366
And edit for linux...
ilya-fedin Oct 19, 2016
f329fa3
OpenWrt packges, uci integration and more...
ilya-fedin Nov 17, 2016
410f486
probeport path fix
ilya-fedin Nov 17, 2016
44ddacf
Add telnet support and small fixes
ilya-fedin Nov 17, 2016
760b9de
Add ca-certificates as dependency
ilya-fedin Nov 17, 2016
640fcca
Add support of static tty and small fixes
ilya-fedin Nov 17, 2016
d8e7339
small fix
ilya-fedin Nov 17, 2016
4579196
small fix
ilya-fedin Nov 17, 2016
6cc390b
more telnet reboot methods!
ilya-fedin Nov 17, 2016
03d0cbc
send at commands without atc
ilya-fedin Nov 17, 2016
006064e
small fix
ilya-fedin Nov 17, 2016
0810327
add ttl configuration support
ilya-fedin Nov 20, 2016
04db8fa
Prevent multiple downloads
ilya-fedin Nov 27, 2016
48d9164
fix deps
ilya-fedin Nov 27, 2016
829611d
fix deps
ilya-fedin Nov 27, 2016
b7bdf24
Small fixes
ilya-fedin Nov 28, 2016
bc1dcf8
restore files
ilya-fedin Nov 28, 2016
743d834
fix tty detect
ilya-fedin Nov 28, 2016
67d7a05
fix permissions
ilya-fedin Nov 28, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Способы перезапуска модема
По умолчанию в скрипте используется метод перезапуска сети. Т. е. руотер полностью реконнектит все интерфейсы. Это поможет в стике, однако есть такая штука, как хайлинк! Здесь я разберу все известные мне способы перезапуска. Достаточно заменить строчку `/etc/init.d/network restart` в скрипте. Ну что, поехали?

## Способ 1 - перезагрузка через API
У HiLink есть API. Через него можно делать с модемом все что угодно - перезагружать, реконнектить и т.д. К сожалению, я так и не покорил этот способ, потому сразу едем дальше.

## Способ 2 - перезагрузка через telnet
У модифицированных прошивок есть telnet. К сожалению, нельзя командой выполнить перезагрузку. Можно поставить питон и написать скрипт... Но разве роутер - место для траты памяти? Да и я не умею программировать на питоне, потому едем дальше

## Способ 3 - перезагрузка через adb
У adb есть два способа перезагрузки:

1. `adb reboot`
2. `adb shell reboot`

## Способ 4 - AT-команды
Вот оно! Единственный нормальный способ!
И так, нам понадобится лишь gcom, модифицированная прошивка для вашего модема (необязательно, зависит от модели) и скрипт в этом репозитории.
Ну что ж, поехали!

Сначала пропишем открытие порта PC UI. Для этого любым удобным способом открываем порты и вводим в порт PC UI вашим любимым терминалом:

`AT^NVWREX=50091,0,60,01 00 00 00 A1 A2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A3 A2 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00`

А теперь самое интересное - команды для перезапуска модема с роутера.

1. `COMMAND=AT^RESET gcom -d $device -s /etc/gcom/runcommand.gcom`
2. `COMMAND=AT+CFUN=1,1 gcom -d $device -s /etc/gcom/runcommand.gcom`

Выбирайте любую понравившуюся. Первая комнада чисто хуавеевская. Где $device - путь до командного порта. Скорее всего это будет /dev/ttyUSB0. В стике всегда несколько портов, обычно это самый старший. У меня это /dev/ttyUSB2.

И да, для вас наверняка осталось не понятным, когда нужна модифицированная прошивка. Очень просто! Она нужна тогда, когда на вашей прошивке заблокированно выполнение кодман ^NVWREX и ^NVRDEX. Узнать об этом можно в теме своего модема на 4PDA.

## Способ 5 - usbreset
`usbreset "Имя устройства"`

## Способ 6 - реконнект средствами OpenWrt
Подходит только для стика, увы

`/etc/init.d/network restart`

# Фикс TTL
Здесь приложена служба для фиксации TTL. Для ее работы нужен лишь установленный пакет kmod-ipt-ipopt.

7 changes: 0 additions & 7 deletions ban.sh

This file was deleted.

31 changes: 31 additions & 0 deletions etc/gcom/runcommand.gcom
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# run AT-command from environment
opengt
set com 115200n81
set senddelay 0.02
waitquiet 1 0.2
flash 0.1

:start
print "sending -> ",$env("COMMAND"),"\n"
send $env("COMMAND")
send "^m"

waitfor 15 "OK","ERR","ERROR","COMMAND NOT SUPPORT"
if % = 0 goto continue
if % = 1 goto error
if % = 2 goto error
if % = 3 goto notsupported

print "Timeout running AT-command\n"
exit 1

:error
print "Error running AT-command\n"
exit 1

:notsupported
print "AT-command not supported\n"
exit 1

:continue
exit 0
23 changes: 23 additions & 0 deletions etc/hotplug.d/iface/99-yotaban
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/sh

[ "$ACTION" = ifup ] || exit 0

/etc/init.d/yotaban enabled && {
[ -f /tmp/yotaban ] && {
# remove old records

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если список изменился, старые записи таким методом не удалятся.
Чтобы избежать этой проблемы в TTLMaster для Android я создавал отдельную новую цепочку со всеми правилами дропа. И когда нужно, польностью её обнулял.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тем не менее, у меня это работает. Но у меня удален из прошивки фарйволл, потому более ничего iptables не трогает.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну да, работать-то будет, проблема не в этом. Проблема в том, что мы удалим одну запись из списка, обновим его и перезапустим этот скрипт -- удаленная запись останется в правилах.

@ilya-fedin ilya-fedin Oct 17, 2016

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Попробовал ваш способ для записи в telnet - нет, не работает

@derlaft derlaft Oct 17, 2016

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может быть так?

(echo root; echo root; echo reboot) | while read s; do echo "$s"; sleep 1; done | nc 192.168.1.1 23

@ilya-fedin ilya-fedin Nov 17, 2016

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Работает, несколько упростил:
echo reboot | busybox nc -w 1 -i 1 192.168.8.1 23
Но в OpenWrt как всегда по дефолту не добавлены эти ключи, пришлось городить костыль:

(echo reboot; sleep 1) | nc 192.168.8.1 23 & (sleep 1; kill `pidof $(ps | grep 'nc 192.168.8.1 23' | grep -v 'grep')`)

Кстати, я сделал пакеты и конфиг написал, сейчас дополнил телнетом.

while read -r i; do
[ "`echo $i | sed -n '/^#.*$/p'`" ] && continue
iptables -D FORWARD -d $i -j DROP;
done < /tmp/yotaban
}

# update records
#wget -O /tmp/yotaban http://cdn.rawgit.com/TTLMaster/yota-ban-list/master/list.txt
wget -O /tmp/yotaban https://raw.githubusercontent.com/TTLMaster/yota-ban-list/master/list.txt

# add new records
while read -r i; do
[ "`echo $i | sed -n '/^#.*$/p'`" ] && continue
iptables -I FORWARD -d $i -j DROP;
done < /tmp/yotaban
}
11 changes: 11 additions & 0 deletions etc/init.d/ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh /etc/rc.common

START=19

start() {
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
}

stop() {
iptables -t mangle -D POSTROUTING -j TTL --ttl-set 64
}
12 changes: 12 additions & 0 deletions etc/init.d/yotaban
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh /etc/rc.common

START=99

stop() {
[ -f /tmp/yotaban ] && {
while read -r i; do
[ "`echo $i | sed -n '/^#.*$/p'`" ] && continue
iptables -D FORWARD --destination $i -j REJECT;
done < /tmp/yotaban
}
}
11 changes: 11 additions & 0 deletions etc/init.d/yotareboot
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh /etc/rc.common

START=99
USE_PROCD=1

start_service() {
procd_open_instance
procd_set_param command /sbin/yotareboot
procd_set_param respawn
procd_close_instance
}
5 changes: 2 additions & 3 deletions yotareboot.sh → sbin/yotareboot
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
#!/bin/sh
for i in 1 2 3 4 5
do
while true; do
content=$(wget captive.apple.com -q -O -)
if [ `echo $content | grep -c "tethering.svg" ` -gt 0 ]
then
usbreset "HUAWEI Mobile"
/etc/init.d/network restart
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может быть использовать конфиг-файл для определения метода перезагрузки? Тогда можно было бы скрипты полностью уже собранным opkg-пакетом дистрибьютить.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я пока конфиг-файлы не писал. Посмотрю, идея хорошая.

@derlaft derlaft Oct 17, 2016

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ОК. Помогу по мере возможности, спрашивай, если что: баш знаю хорошо, но к openwrt у меня сейчас доступа нет.

sleep 10
done
Expand Down