Страница 1 из 2
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 13:05
ogankvik
Здравствуйте. Хочу настроить автоматическую перезагрузку sip телефонов Grandstream. У них динамический ip адрес. Мне известны МАС адреса. Этот код выполняемый из браузера 100% перезагружает телефон:
http://10.238.31.116/cgi-bin/api-sys_operation?passcode=xxxxxxxxx &request=REBOOT&
Нашел оригинальный скрипт:
Код: Выделить всё
while read TYPE MAC IP EXT IGNORE; do
echo "$TYPE, $MAC, $IP, $EXT, $IGNORE"
if [ "$TYPE" == "SPA303" ]; then
echo "Processing $IP - $EXT"
curl -s "http://$IP/admin/reboot" > /dev/null
sleep 1
fi
done
Переделал под себя, но он не работает. Выполняю в консоли sh 1.sh, консоль вечно его выполняет, не выдавая ошибок. При этом телефон не перезагружается.
Код: Выделить всё
#!/bin/sh
while read TYPE MAC IP EXT IGNORE; do
echo "$TYPE, $MAC, $IP, $EXT, $IGNORE"
if [ "$MAC" == "00:0B:82:ED:90:8B" ]; then
echo "Processing $IP - $EXT"
curl -s "http://$IP/cgi-bin/api-sys_operation?passcode=GG31qvD18z&request=REBOOT&" > /dev/null
sleep 1
fi
done
Описание скрипта в моем (не)понимании:
Код: Выделить всё
#!/bin/sh
while read TYPE MAC IP EXT IGNORE; do //предлагает выбрать какой тип данных будет использован для вычисления ip адреса
echo "$TYPE, $MAC, $IP, $EXT, $IGNORE"
if [ "$MAC" == "00:0B:82:ED:90:8B" ]; then //тут я указал что тип данных - MAC адрес и вписал МАС адрес одного из телефонов
echo "Processing $IP - $EXT"
curl -s "http://$IP/cgi-bin/api-sys_operation?passcode=xxxxxxxxx&request=REBOOT&" > /dev/null //http://$IP/cgi-bin/api-sys_operation?passcode=GG31qvD18z&request=REBOOT& - сюда скипт должен подставить вычесленный IP адрес, xxxxxxxxx - пароль, REBOOT - команда на перезагрузку.
sleep 1
fi
done
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 13:11
rogoznik
ogankvik писал(а): ↑15 окт 2021, 13:05
"http://$IP/cgi-bin/api-sys_operation?passcode=xxxxxxxxx&request=REBOOT&"
Выведи это в консоль и посмотри что там у тебя
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 13:17
Chocobo
ogankvik писал(а): ↑15 окт 2021, 13:05
while read TYPE MAC IP EXT IGNORE; do
...
Выполняю в консоли sh 1.sh, консоль вечно его выполняет,
Так в скрипт же ничего не передаешь получается.
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 13:19
ogankvik
Заменил $IP на 10.238.31.116. Не смотря на "[4] Завершён request=REBOOT" - телефон не перезагрузился
Код: Выделить всё
user@user-desktop:~$ http://10.238.31.116/cgi-bin/api-sys_operation?passcode=xxxxxxxxx&request=REBOOT&
[5] 2238
[6] 2239
[3] Выход 127 http://10.238.31.116/cgi-bin/api-sys_operation?passcode=xxxxxxxxx
[4] Завершён request=REBOOT
bash: http://10.238.31.116/cgi-bin/api-sys_operation?passcode=xxxxxxxxx: Нет такого файла или каталога
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 13:20
WWolf
ogankvik, passcode

Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 13:47
ogankvik
WWolf писал(а): ↑15 окт 2021, 13:20
ogankvik, passcode
да вы специально его у меня вытянули))). В двух местах скрыл, проверяю сообщение - а он еще в одном месте отобразился..
Chocobo писал(а): ↑15 окт 2021, 13:17
ogankvik писал(а): ↑15 окт 2021, 13:05
while read TYPE MAC IP EXT IGNORE; do
...
Выполняю в консоли sh 1.sh, консоль вечно его выполняет,
Так в скрипт же ничего не передаешь получается.
а как туда что-то передать? Я вроде вписал мак в строку "if [ "$MAC" == "00:0B:82:ED:90:8B" ]; then".
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 14:44
Chocobo
ogankvik, покажи источник скрипта.
Тут я пока вижу что они у тебя пустые на входе, соответственно мак ему сравнивать будет не с чем
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 14:46
slant
ogankvik, Наберите "man read" и прозрейте. Ваш скрипт тупо ждет ввода данных с клавиатуры всех переменных: TYPE MAC IP EXT IGNORE. В нем нет вообще ничего на счет проверки соответствия реальных IP и MAC. Он проверят то, что будет с клавиатуры введено, и ничего более. В текущем виде - совершенно бесполезно для вашей задачи.
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 14:51
ogankvik
Chocobo писал(а): ↑15 окт 2021, 14:44
ogankvik, покажи источник скрипта.
https://qna.habr.com/q/274902
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 14:58
Chocobo
ogankvik писал(а): ↑15 окт 2021, 13:05
У них динамический ip адрес. Мне известны МАС адреса
тогда проще сваять своего скрипта, навскидку как-то так
1. на вход подаем мак нужного девайса
2. находим ip по маку из
arp
или
ip n
3. отправляем курлом тот реквест на ребут
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 15:05
Chocobo

- Что-то вот такое)
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 15:43
ogankvik
Chocobo, спасибо!!! Переписал код из вашего примера:
Код: Выделить всё
MAC="00:0B:82:ED:90:8B"
IP=$(ip n | grep $MAC | cut -f1 -d " ")
echo $IP
curl -v "http://$IP/cgi-bin/api-sys_operation?passcode=xxxxxxxxx&request=REBOOT&"
и всё равно не работает:
Код: Выделить всё
* Unwillingly accepted illegal URL using 3 slashes!
* Trying 172.17.150.249...
* TCP_NODELAY set
а как вы выполнили код так, чтобы отображался результат выполнения (как у вас на скрине)?
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 16:00
WWolf
ogankvik писал(а): ↑15 окт 2021, 15:43
Unwillingly accepted illegal URL using 3 slashes!
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 16:00
rogoznik
ogankvik писал(а): ↑15 окт 2021, 15:43
http://$IP/cgi-bin/api-sys_operation?passcode=xxxxxxxxx&request=REBOOT&
&
в конце строки лишний
В теории, вроде как, не должен влиять, но мало ли
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 15 окт 2021, 16:10
Chocobo
ogankvik писал(а): ↑15 окт 2021, 15:43
чтобы отображался результат выполнения
он и будет отображаться, это
-v
(verbose) ключ для curl'a
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 19 окт 2021, 14:46
ogankvik
Думаю, проблема где-то в этом месте:
ip n - отрабатывает. Список маков выводится. А вот grep $MAC | cut -f1 -d " " не знаю как проверить. Может у меня какой-то пакет в системе отсутствует. Chocobo, ты из какой ОС этот скрипт запускал? У меня Минт.
Сейчас скрипт работает как-то так:
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 19 окт 2021, 15:37
WWolf
ogankvik, дело не в версиях, эти утилиты работают везде одинаково...
а ошибка у тебя в мак адресе... ip n
возвращает в нижнем регистре, а ты передаёшь в смешанном/в верхнем...
grep -i сделай, что б игнорировать регистр
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 19 окт 2021, 15:40
Chocobo
все так, $IP
не получен. grep
сравнивает жестко регистр без -i
Он тебе его должен перед выполнением показать, где выполняется echo $IP
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 19 окт 2021, 15:42
ogankvik
WWolf писал(а): ↑19 окт 2021, 15:37
а ты передаёшь в смешанном/в верхнем...

ну и долба.. . Самое обидное - я же исправил регистр букв в маке. КАК можно было не заметить эту D???? Вот и спрашиваешь потом, откуда берется неуверенность в себе.. . БОЛЬШОЕ СПАСИБО!
Перезагрузка SIP телефонов по маку или другим статичным данным кроме ip адреса
Добавлено: 19 окт 2021, 16:09
slant
ogankvik, Я бы не советовал пока слишком успокаиваться - этот вариант не будет работать 100% стабильно.
Он опирается на кеш ARP, адреса же в нем появляются только после обращения по IP и остаются не на всегда. Т.е. если до того как скрипт запускается, этот компьютер не обращался к нужному телефону - IP найден не будет.
Чтобы гарантировано найти нужный IP - надо именно искать по маку, а не только кеш проверять. Есть такая программа - arping, она работает примерно как обычный ping но по маку. После нее нужное значение в кеше гарантировано будет, если телефон вообще в сети.