Jump to content

priZrak495

Forum Members
  • Posts

    9
  • Joined

  • Last visited

Posts posted by priZrak495

  1. Метод от Станислава не очень, т.к. ловит любые клиенты который подключились/отключились к точке доступа.
    Например, каждое включение смарт-телевизора вызывает отправку сообщения :)

  2. Ребят, помогите разобраться пожалуйста?!

    Провайдер не режет порты, с мобильника могу подключиться к шаре из вне, а вот с компьютера с работы не могу прорваться... пишет ошибку

    Core::Scgi::Session: unsupported method "OPTIONS" for "/".
  3. Всем привет.

    Решил поделиться своей наработкой по вопросу отправки почтового сообщения при подключении/отключении определенных клиентов к wifi точке доступа.
    Изначально идея была в том, чтобы получать сообщения когда ребенок уйдет и придет домой.
    В линуксе не особенно то и профи :) но кое что смог напрограммировать, вот, выкладываю, может кому пригодиться.

    Вариант 1:
    Нужен cron и msmtp.

    Скрытый текст

    #!/bin/sh

    for ip in "192.168.101.20 T2Ultra" "192.168.101.23 XperiaC4" #IP и имя устройства, нужно вбить свои
    do
    set -- $ip
    if /opt/bin/ping -c 1 -w 2 $1 &>/dev/null; #тупо пингуем устройство
    then
     if [ -f /opt/etc/IPs/$1 ] #проверяем наличие временного файла (если есть, клиент подключен)
     then
      echo "Device $2 ($1) still connected"
     else
      echo -e "Subject: $2 connected\r\n\r\nClient $2 ($1) has been connected to Keenetic at $(date)" |/opt/bin/msmtp -t sample@gmail.com #отправляем почту
      echo "$(date) Device $2 ($1) connect to Keenetic" >> /opt/tmp/log/chk_client.log #пишем в лог
      touch "/opt/etc/IPs/$1"
     fi
    else
     if [ -f /opt/etc/IPs/$1 ]
     then
      echo -e "Subject: $2 disconnected\r\n\r\nClient $2 ($1) has been disconnected from Keenetic at $(date)" |/opt/bin/msmtp -t sample@gmail.com
      echo "$(date) Device $2 ($1) disconnect from Keenetic" >> /opt/tmp/log/chk_client.log
      rm "/opt/etc/IPs/$1"
     else
      echo "Device $2 ($1) is not connected"
     fi
    fi
    done

    Минус данного способа в том, что если клиент (в данном случае телефон засыпает и отваливается от вайфая - не все модели так делают - то приходит письмо, что клиент отключился).

    Поэтому я придумал вариант 2.
    Может туповато сделано, но это все на что меня хватило исходя из моих познаний :) Строго не судите.
    Нужен ndmq, cron и msmtp.

    Вариант 2:

    Скрытый текст

    #!/bin/sh

    amac=`ndmq -x -p "show associations" | grep "mac"` #узнает кто авторизован по wifi

    tmp=${amac//<mac>/}
    tmp=${tmp//<\/mac>/} #убираем лишнее и оставляем чистый MAC

    dev1="discon"
    dev2="discon"

    for cmac in $tmp
    do
    if [ $cmac = "c1:31:b1:61:21:41" ] #забиваем нужный MAC
    then
     dev1="connected"
    fi
    if [ $cmac = "a1:e1:51:81:f1:21" ] #забиваем второй нужный MAC (для жены например)
    then
     dev2="connected"
    fi
    done

    if [ $dev1 = "connected" ]
    then
     if [ ! -f /opt/etc/IPs/XperiaC4 ] #проверяем файл, если нет, то клиент вновь подключенный
     then
      echo -e "Subject: XperiaC4 connected\r\n\r\nClient XperiaC4 has been connected to Keenetic at $(date)" |/opt/bin/msmtp -t sample@gmail.com
      echo "$(date) Device XperiaC4 connect to Keenetic" >> /opt/tmp/log/chk_client.log
      touch "/opt/etc/IPs/XperiaC4"
     fi
    else
     if [ -f /opt/etc/IPs/XperiaC4 ] #если файл есть, то клиент уже был подключен но отключился
     then
      echo -e "Subject: XperiaC4 disconnected\r\n\r\nClient XperiaC4 has been disconnected from Keenetic at $(date)" |/opt/bin/msmtp -t sample@gmail.com
      echo "$(date) Device XperiaC4 disconnect from Keenetic" >> /opt/tmp/log/chk_client.log
      rm "/opt/etc/IPs/XperiaC4"
     fi
    fi

    if [ $dev2 = "connected" ] #тоже самое для второго устройства
    then
     if [ ! -f /opt/etc/IPs/T2Ultra ]
     then
      echo -e "Subject: T2Ultra connected\r\n\r\nClient T2Ultra has been connected to Keenetic at $(date)" |/opt/bin/msmtp -t sample@gmail.com
      echo "$(date) Device T2Ultra connect to Keenetic" >> /opt/tmp/log/chk_client.log
      touch "/opt/etc/IPs/T2Ultra"
     fi
    else
     if [ -f /opt/etc/IPs/T2Ultra ]
     then
      echo -e "Subject: T2Ultra disconnected\r\n\r\nClient T2Ultra has been disconnected from Keenetic at $(date)" |/opt/bin/msmtp -t sample@gmail.com
      echo "$(date) Device T2Ultra disconnect from Keenetic" >> /opt/tmp/log/chk_client.log
      rm "/opt/etc/IPs/T2Ultra"
     fi
    fi

    Минус способа в том, что нужно вбивать MAC адреса (столько сколько нужно, благо у меня два) и некоторой корявости, но зато все работает!
    Если кто допилит алгоритм на более универсальный - будет респект!

    Все это дело в cron через каждые 5 минут и вуаля!

    • Thanks 2
    • Upvote 1
×
×
  • Create New...