Безделушка, но бывает удобно.

Тема в разделе "Флудилка", создана пользователем Igor68, 16 дек 2020.

  1. Igor68

    Igor68 Гуру

    У меня несколько роуторов (три). Когда делаю подключение 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 надо сначала разорвать, а потом восстановить(можно и через вэб морду)... ну или перезапустить сам роутер.
     
    Последнее редактирование: 16 дек 2020
    arkadyf, Un_ka и ИгорьК нравится это.
  2. Un_ka

    Un_ka Гуру

    А вот если бы сделать такое на esp8266 с использованием экономии энергии и некоторой автономностью. Правда это будет также сигнализировать об отключении wi-fi или электроэнергии. Попутно можно ещё значение датчиков куда-нибудь фидить. ;)
     
  3. Igor68

    Igor68 Гуру

    А эта безделушка:
    Код (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 не будет удалён из этой сети
     
    Последнее редактирование: 16 дек 2020
    arkadyf нравится это.
  4. Un_ka

    Un_ka Гуру

    А что внутри этого скрипта?
    Код (Bash):
    ./aping.sh $IPs cp
    Как вы вдруг английскую букву це тут поставили?
    Код (Bash):
          echo "дальнейшие дейстcвия:"
     
  5. Daniil

    Daniil Гуру

    примерно так же думали пожарники.
    Пока был карантин у моего соседа сдохла батарейка в пожарной сирене и я жил 11 дней с писком в каждые 27 секунд. Пощадите соседей)
     
  6. Igor68

    Igor68 Гуру

    :)
     
    Daniil нравится это.
  7. Igor68

    Igor68 Гуру

    прошу прощения... тут 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
    Простите! Совсем забыл.
     
    arkadyf нравится это.
  8. parovoZZ

    parovoZZ Гуру

    пожарники - это погорельцы.
    А так у меня у соседа сверху тоже пищало двое суток. Через вентиляшку слышно, как на ладони.
    А у себя я это недоразумение снял. Ну для кого он будет пищать?
     
    Igor68 нравится это.
  9. Airbus

    Airbus Радиохулиган Модератор

    Пожарники это которые жарят.Окорочка. Стейк.Шашлык
     
    Igor68 нравится это.
  10. Un_ka

    Un_ka Гуру

    Код (Bash):

                str=$(ping -c 1 $pip 1>&2>/dev/null) &
         
    Вы утилитой ping пингуете. И как долго происходит сканирование локальной сети?
    Я вот пробовал им у меня долго получалось.
     
  11. Igor68

    Igor68 Гуру

    Это верно! Я делал с учётом возможностей старенькой 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
     
    Последнее редактирование: 17 дек 2020
  12. Igor68

    Igor68 Гуру

    Есть и такие, что на ардуине делали автоматизацию домашнего водогрейного газового котла... их обычно эвакуируют накрыв белой простынкой.
     
  13. Igor68

    Igor68 Гуру

    Вот ещё одна безделушка:
    Снимок экрана от 2020-12-19 21-31-38.png
    Это адрес 24C02 подключенного по I2C к малине (старенькой мадине Rpi 1 B+). Тут утилита i2cdetect обёрнутая в PHP. Малина в корпусе на двустороннем скотче приклеена к роутеру DIR620 и от него питается... сеть ETHERNET так же в этот роутер.
    Это архив папки i2c находящейся в рабочей директории web-сервера Apache, работающему та той малине. Схема подключения тут же.
    i2c.zip
    Время реакции при горячей смене устройства(установка в колодку) - пара секунд.
    Может всё это и не надо, но было время хотел сделать что-то через ВЭБ-морду. Может потом сделаю и программатор через такую морду.

    PS: Простите если повторяюсь.
     

    Вложения:

    • i2c.zip
      Размер файла:
      171,8 КБ
      Просмотров:
      127
    Последнее редактирование: 22 дек 2020
    Рокки1945 и Un_ka нравится это.