На неделе от безделья написал скрипты для сброса PPPOE сессии на ADSL модеме через ПК
Поскольку у меня нет белого IP адреса я пользуюсь ими для переподключения сессии.
Это позволяет мне качать с файлообменников без задержек и ожидания.
Скрипты написаны для ОС Linux
Требуется программа - expect
На смену IP адреса уходит ~20 секунд.
Тестировалось на модеме StarNet перешитый в Acorp Lan 120
Идея:
При обрыве соединения ppp0 происходит автоматическое переподключение.
Всего 3 скрипта, всё сложить в одну папку.
p1 - Узнаёт PID демона PPPD
Листинг:
Copy Source | Copy HTML
- #!/usr/bin/expect -f
- log_user 0
- spawn telnet 192.168.1.1
- expect "BusyBox on router login:" {send "root\r"}
- expect "Password:" {send "Admin\r"}
- expect "#" {send "ps ax |grep pppd\r"}
- log_user 1
- send "exit\r"
- expect eof
p2 - Убивает PPPD по PID возвращённому скриптом run.sh (смотри ниже)
И модем СРАЗУ автоматически поднимает заново.
Листинг:
Copy Source | Copy HTML
- #!/usr/bin/expect -f
- set pid [lindex $argv 0]
- log_user 0
- spawn telnet 192.168.1.1
- expect "BusyBox on router login:" {send "root\r"}
- expect "Password:" {send "Admin\r"}
- expect "#" {send "kill $pid"}
- send "exit\r"
- expect eof
Скрипт run.sh - Парсит PID от p1 и отсылает его в качестве аргумента p2 который и прибивает PPPD
Листинг:
#!/bin/sh
./p1 | grep pppd | grep -v grep | awk '{print $1;}' | xargs ./p2
Даём права на исполнение и просто делаем: ./run.sh
Всё остальное пройдёт автоматом.
Поправьте IP модема на свой.
Для желающих прикрутить цикл проверки IP:
Пропарсить IP с модема можно на пример так:
ifconfig eth0 | colrm 1 10 | awk -F "[: ]" '$1 ~ /^inet$/{print $3}'
Т.е пишем например скрипт p3 который возвращает ip
Вот готовый:
Copy Source | Copy HTML
- #!/usr/bin/expect -f
- log_user 0
- spawn telnet 192.168.1.1
- expect "BusyBox on router login:" {send "root\r"}
- expect "Password:" {send "Admin\r"}
- expect "#" {send "ifconfig ppp0\r"}
- log_user 1
- send "exit\r"
- expect eof
И парсим его вывод.
Например:
$ ./p3.sh | colrm 1 10 | awk -F "[: ]" '$1 ~ /^inet$/{print $3}'
90.151.225.121
Скрипты можно модифицировать, например:
Можно написать цикл проверки IP адреса если Вас интересует конкретный диапазон IP.
В общем всё зависит от Вашей фантазии.