У меня несколько роуторов (три). Когда делаю подключение VPN к предприятию (работаю на удалёнке), то случается отваливается основной интернет. Когда на компе, но это видно сразу... а когда и роутер глючит. На стене "висит" UC-7112Lx-Plus с двумя сетевухами. Надо заставить его что-то делать и вот. Код (Bash): #!/bin/bash echo "Starting internet beep control..." while [ true ]; do sb=$(ping -c1 8.8.8.8 2>/dev/null) str=$? if ! [ $str -eq "0" ]; then beep 250 usleep 250 beep 250 usleep 250 beep 250 fi sleep 1 done Теперь когда интернет сдохнет, UC-7112Lx-Plus издаёт три писка (тройной) каждую секунду... ну пока он не будет восстановлен. Можно и на бесхозную малину прикрутить, или на роутер если умеет издавать звуки и позволяет запускать скрипты. Следует отметить, что usleep есть на UC-7112Lx-Plus, когда на debian применяется usleep 0,25 (как целые, так и дробные значения) В моём случае роутер с выходом в инет показывает норму как на индикаторе, так и на вебморде. И соединение wan надо сначала разорвать, а потом восстановить(можно и через вэб морду)... ну или перезапустить сам роутер.
А вот если бы сделать такое на esp8266 с использованием экономии энергии и некоторой автономностью. Правда это будет также сигнализировать об отключении wi-fi или электроэнергии. Попутно можно ещё значение датчиков куда-нибудь фидить.
А эта безделушка: Код (Bash): #!/bin/bash # # контроль локальной сети # /25.09.2019/ # IPfix="" ((szIPfix=0)) IPscan="" ((szIPscan=0)) IPs="" #рабочий цикл aping function floop() { ((lfloop=1)) while( ((lfloop > 0)) ); do #сканирование str=`./aping.sh $IPs cp` IFS=$'\n' str=($(echo -e "$str")) szIPscan=${#str[@]} ((cnts=0)) while( ((cnts < szIPscan)) ); do ((cntf=0)) ((alien=1)) while( ((cntf < szIPfix)) ); do if [ "${IPfix[$cntf]}" == ${str[$cnts]} ]; then ((alien=0)) break; fi ((cntf++)) done if ( ((alien > 0)) ); then echo "${str[$cnts]}" beep 1000 fi ((cnts++)) done done } echo ">>> lcntrl.sh <<<" if [ "$1" == "" ] ; then echo "help - подсказка и выход" echo "scan - сканирование списка адресов" echo -n "команда ?:" read par else par=$1 fi if [ "$par" == "help" ]; then echo "$0 help - подсказка и выход" echo "$0 scan - сканирование списка адресов" exit 0 fi ((loop = 1)) while( ((loop > 0)) ); do case $par in "scan") echo -n "укажите диапазон IP ?:" read IPs echo "ping по списку..." str=`./aping.sh $IPs cp` IFS=$'\n' str=($(echo -e "$str")) sz=${#str[@]} ((cnt = 0)) while( ((cnt < sz)) ); do echo "$cnt. ${str[$cnt]}" ((cnt++)) done echo "всего найдено адресов: $sz (нумерация с \"0\")" echo "дальнейшие действия:" echo "fix - зафиксировать список IP адресов" echo "scan - повторное сканирование IP адресов" echo "q - выход" echo -n "? " read par case $par in "q") exit 0 ;; "fix") ((szIPfix = sz)) ((cnt = 0)) while( ((cnt < sz)) ); do IPfix[$cnt]=${str[$cnt]} ((cnt++)) done ;; *) esac ;; "fix") echo "зафиксированный локально список IP адресов (всего $szIPfix):" ((cnt = 0)) while( ((cnt < szIPfix)) ); do echo "$cnt. ${IPfix[$cnt]}" ((cnt++)) done echo "дальнейшие дейстcвия:" echo "list - просмотр списка IP адресов" echo "scan - повторное сканирование IP адресов" echo "del - удаление записи из списка IP адресов" echo "lwork - постоянный цикл поиска" echo "q - выход" echo -n "? " read par case $par in "q") exit 0 ;; "list") par="fix" ;; *) ;; esac ;; "del") echo "удаление записи:" echo -n "IP адрес ? :" read ip ((cnt = 0)) while( ((cnt < szIPfix)) ); do if [ "${IPfix[$cnt]}" == "$ip" ]; then str[$cnt]="" else str[$cnt]=${IPfix[$cnt]} fi ((cnt++)) done IPfix="" ((cnt = 0)) ((cnto = 0)) while( ((cnt < szIPfix)) ); do if ! [ "${str[$cnt]}" == "" ]; then IPfix[$cnto]=${str[$cnt]} ((cnto++)) fi ((cnt++)) done ((szIPfix = cnto)) par="fix" ;; "lwork") floop ;; *) echo "действие не определено - выход" exit 1 ;; esac done exit 0 Просто пингует сеть wi-fi (обычная домашняя сеть) и так же на UC-7112Lx-Plus. В чем смысл? Сначала идёт сканирование домашней сети(указывается диапазон например 192.168.0.1-254), потом фиксация результатов с выводом результатов. Ну а потом бесконечный цикл контроля. Стоит в сети появиться новому устройству(новый IP адрес в сети) устройство издаёт звуковой сигнал и выводит в консоль значение IP. до тех пор пока этот IP не будет удалён из этой сети
А что внутри этого скрипта? Код (Bash): ./aping.sh $IPs cp Как вы вдруг английскую букву це тут поставили? Код (Bash): echo "дальнейшие дейстcвия:"
примерно так же думали пожарники. Пока был карантин у моего соседа сдохла батарейка в пожарной сирене и я жил 11 дней с писком в каждые 27 секунд. Пощадите соседей)
прошу прощения... тут aping.sh отдельный скрипт: Код (Bash): #!/bin/bash # Пинг диапазона IP адресов _tw="1" ((pw = 0)) #время перед выходом в режиме потоков ((_lloop=10)) par=$1 if [ "$par" == "" ] ; then echo -n "IP (или \"help\" для подсказки) ?:" read ipurl else ipurl=$par fi if [ "$ipurl" == "help" ]; then echo "" echo ">>> $0 - принятая форма применения: <<<" echo "<ip> - указание IP адрреса например:" echo " 192.168.1.1 это один адрес;" echo " 192.168.1.1-254 это диапазон адресов с 192.168.1.1 по 192.168.1.254;" echo " 192.168.0-10.1-254 это тоже диапазон адресов с 192.168.0.1 по 192.168.10.254" echo "$0 <ip> c - перебор адресов с пингом в цикле с выводом на экран" echo "$0 <ip> cp - формирование отдельных потоков пинга по диапазону адресов с выводом на экран" echo " (внимание! производится ожидание завершения 60 сек всех потоков перед окончанием работы)" echo "$0 <ip> fire - массивный Ping одного адреса" exit 0 fi mode=$2 if [ "$mode" == "" ] ; then echo "Укажите режим работы:" echo "c - обычный Ping (по списку адресов) с выводом в консоль" echo "cp - обычный Ping (по списку адресов в режиме потока) с выводом в консоль" echo "fire - массивный Ping одного адреса" echo -n "режим ?:" read mode fi par=$(echo -e $ipurl | sed "s/\./ /g") ip1=$(echo -e $par | awk '{print($1)}') ip2=$(echo -e $par | awk '{print($2)}') ip3=$(echo -e $par | awk '{print($3)}') ip4=$(echo -e $par | awk '{print($4)}') # ip1=$(echo -e $ip1 | sed "s/-/ /g") ip1_1=$(echo -e $ip1 | awk '{print($1)}') ip1_2=$(echo -e $ip1 | awk '{print($2)}') if [ "$ip1_2" == "" ] ; then ip1_2=$ip1_1 fi # ip2=$(echo -e $ip2 | sed "s/-/ /g") ip2_1=$(echo -e $ip2 | awk '{print($1)}') ip2_2=$(echo -e $ip2 | awk '{print($2)}') if [ "$ip2_2" == "" ] ; then ip2_2=$ip2_1 fi # ip3=$(echo -e $ip3 | sed "s/-/ /g") ip3_1=$(echo -e $ip3 | awk '{print($1)}') ip3_2=$(echo -e $ip3 | awk '{print($2)}') if [ "$ip3_2" == "" ] ; then ip3_2=$ip3_1 fi # ip4=$(echo -e $ip4 | sed "s/-/ /g") ip4_1=$(echo -e $ip4 | awk '{print($1)}') ip4_2=$(echo -e $ip4 | awk '{print($2)}') if [ "$ip4_2" == "" ] ; then ip4_2=$ip4_1 fi # function cpingone() { ad="$ip1_1.$ip2_1.$ip3_1.$ip4_1" str=$(ping -c 1 $ad 2>&1>/dev/null) ret=$? if [ ${ret} -eq 0 ] ; then echo "$ad" fi } function cloop() { ip21=$ip2_1 ip31=$ip3_1 ip41=$ip4_1 while( ((ip1_1 <= ip1_2)) ) ; do ip2_1=$ip21 while( ((ip2_1 <= ip2_2)) ) ; do ip3_1=$ip31 while( ((ip3_1 <= ip3_2)) ) ; do ip4_1=$ip41 while( ((ip4_1 <= ip4_2)) ) ; do cpingone ((ip4_1 = ip4_1 + 1)) done ((ip3_1 = ip3_1 + 1)) done ((ip2_1 = ip2_1 + 1)) done ((ip1_1 = ip1_1 + 1)) done } function cploop() { ip21=$ip2_1 ip31=$ip3_1 ip41=$ip4_1 while( ((ip1_1 <= ip1_2)) ) ; do ip2_1=$ip21 while( ((ip2_1 <= ip2_2)) ) ; do ip3_1=$ip31 while( ((ip3_1 <= ip3_2)) ) ; do ip4_1=$ip41 while( ((ip4_1 <= ip4_2)) ) ; do cpingone & ((ip4_1 = ip4_1 + 1)) done ((ip3_1 = ip3_1 + 1)) done ((ip2_1 = ip2_1 + 1)) done ((ip1_1 = ip1_1 + 1)) done ((pw = 0)) } # case $mode in "c") cloop ;; "cp") ((pw = 1)) cploop #echo "loop1" while( ((pw > 0)) ) ; do sleep 1 done ((lloop = _lloop)) #echo "loop2" while( ((lloop > 0)) ) ; do pp=`ps -A | grep -o ping` if [ "$pp" == "" ] ; then ((lloop = 0)) fi sleep 1 ((lloop = lloop - 1)) done ;; "fire") echo -n "количество запросов ?:" read pcnt pip="$ip1_1.$ip2_1.$ip3_1.$ip4_1" ((cnt=0)) while( ((cnt < pcnt)) ); do str=$(ping -c 1 $pip 1>&2>/dev/null) & ((cnt++)) done ;; *) ;; esac exit 0 Простите! Совсем забыл.
пожарники - это погорельцы. А так у меня у соседа сверху тоже пищало двое суток. Через вентиляшку слышно, как на ладони. А у себя я это недоразумение снял. Ну для кого он будет пищать?
Код (Bash): str=$(ping -c 1 $pip 1>&2>/dev/null) & Вы утилитой ping пингуете. И как долго происходит сканирование локальной сети? Я вот пробовал им у меня долго получалось.
Это верно! Я делал с учётом возможностей старенькой MOXA UC-7112Lx-Plus... у которой ОЗУ всего 32 Мб. Можно было и быстро, но она "умирает" - перестаёт отзываться по SSH. Код (Text): www-data@Moxa:~$ ps -A PID USER VSZ STAT COMMAND 1 root 1460 S init [3] 2 root 0 SWN [ksoftirqd/0] 3 root 0 SW< [events/0] 4 root 0 SW< [khelper] 5 root 0 SW< [kblockd/0] 6 root 0 SW [pdflush] 7 root 0 SW [pdflush] 9 root 0 SW< [aio/0] 8 root 0 SW [kswapd0] 12 root 0 SW< [kmmcd] 10 root 0 SW [mxcrypto_dispat] 11 root 0 SW [mtdblockd] 13 root 0 SW< [mmcqd] 24 root 0 SWN [jffs2_gcd_mtd3] 61 root 1256 S dhcpcd eth0:1 65 root 1288 S /bin/inetd 73 bin 1224 S /bin/portmap 126 root 1924 S privoxy --pidfile /var/run/privoxy.pid --user root /e 129 root 1972 S /bin/sh --login 136 root 1328 S /bin/snmpd 140 root 1200 S /bin/reportip 19115 root 6832 S sshd: www-data [priv] 19117 www-data 6832 S sshd: www-data@ttyp0 19118 www-data 2380 S -sh 19120 root 6832 S sshd: www-data [priv] 19122 www-data 6832 S sshd: www-data@ttyp1 19123 www-data 2380 S -sh 19126 www-data 1892 S /bin/bash ./lcntrl.sh 19128 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19184 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19186 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19187 www-data 1220 S ping -c 1 192.168.6.1 19188 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19189 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19191 www-data 1220 S ping -c 1 192.168.6.2 19192 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19193 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19195 www-data 1220 S ping -c 1 192.168.6.3 19196 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19197 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19199 www-data 1220 S ping -c 1 192.168.6.4 19200 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19201 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19203 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19204 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19206 www-data 1220 S ping -c 1 192.168.6.5 19207 www-data 1220 S ping -c 1 192.168.6.6 19208 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19209 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19211 www-data 1220 S ping -c 1 192.168.6.7 19212 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19214 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19216 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19217 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19218 root 1212 R ping -c 1 192.168.6.9 19219 www-data 1220 S ping -c 1 192.168.6.8 19220 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19221 www-data 2268 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19222 root 0 [] 19223 www-data 2128 R ps -A 19225 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19226 www-data 1888 R /bin/bash ./aping.sh 192.168.6.1-254 cp 19227 root 0 [] 19229 www-data 1888 S /bin/bash ./aping.sh 192.168.6.1-254 cp 19230 www-data 1888 R /bin/bash ./aping.sh 192.168.6.1-254 cp 19231 www-data 1888 R /bin/bash ./aping.sh 192.168.6.1-254 cp www-data@Moxa:~$ Ещё надо и контролировать окончание каждого PING, что не сделано как надо. Но после фиксации и запуска контроля, его (скрипта) задача только контролировать появление в сети нового IP и пищать при этом (когда все только свои дома, а при появлении гостей пищать). Потому как гости приходят не на пару минут обычно и роутер выдаёт им новые IP. Код (Text): www-data@Moxa:~/nsite4$ ./lcntrl.sh >>> lcntrl.sh <<< help - подсказка и выход scan - сканирование списка адресов команда ?:scan укажите диапазон IP ?:192.168.5.1-254 ping по списку... 0. 192.168.5.1 1. 192.168.5.2 2. 192.168.5.44 3. 192.168.5.94 4. 192.168.5.100 5. 192.168.5.201 6. 192.168.5.240 всего найдено адресов: 7 (нумерация с "0") дальнейшие действия: fix - зафиксировать список IP адресов scan - повторное сканирование IP адресов q - выход ? fix зафиксированный локально список IP адресов (всего 7): 0. 192.168.5.1 1. 192.168.5.2 2. 192.168.5.44 3. 192.168.5.94 4. 192.168.5.100 5. 192.168.5.201 6. 192.168.5.240 дальнейшие дейстcвия: list - просмотр списка IP адресов scan - повторное сканирование IP адресов del - удаление записи из списка IP адресов lwork - постоянный цикл поиска q - выход ? lwork 192.168.5.157 192.168.5.157 192.168.5.157 192.168.5.157 192.168.5.157 Это я своим мобильником подключился по wifi
Есть и такие, что на ардуине делали автоматизацию домашнего водогрейного газового котла... их обычно эвакуируют накрыв белой простынкой.
Вот ещё одна безделушка: Это адрес 24C02 подключенного по I2C к малине (старенькой мадине Rpi 1 B+). Тут утилита i2cdetect обёрнутая в PHP. Малина в корпусе на двустороннем скотче приклеена к роутеру DIR620 и от него питается... сеть ETHERNET так же в этот роутер. Это архив папки i2c находящейся в рабочей директории web-сервера Apache, работающему та той малине. Схема подключения тут же. i2c.zip Время реакции при горячей смене устройства(установка в колодку) - пара секунд. Может всё это и не надо, но было время хотел сделать что-то через ВЭБ-морду. Может потом сделаю и программатор через такую морду. PS: Простите если повторяюсь.