Добрый день!
У меня есть скрипт, который по запросу от любого устройства (TV, телефон, планшет и прочее) на порт 32400 ( медиасервер PLEX) посылает WOL пакет на ПК, на котором развернут PLEX сервер. Скрипт базируется на утилите etherwake и анализе логов утилитой logread.
Как выяснилось позднее в keenetic нет logread.
Буду благодарен если поможете его модицифровать скрипт для работы на роутере giga.
#!/bin/sh
PINGS_CNT=1
SRV_IP=192.168.0.86
SRV_MAC=C8:60:00:99:0A:97
SRV_PORT=32400
#BC_IP=192.168.0.255
WOL=/usr/bin/etherwake
LOG=/var/log/wol
logger -p user.info -t PLEX "[`date -Iseconds`] PLEX Wake on LAN serevice was started."
iptables -D FORWARD -p tcp --dport 32400 -m state --state NEW -j LOG --log-prefix "PLEX Connection "
iptables -I FORWARD -p tcp --dport 32400 -m state --state NEW -j LOG --log-prefix "PLEX Connection "
#echo "Log was truncated at [`date -Iseconds`]" > $LOG # Truncate log
logread -f | while read LOG_LINE; do
DST=`echo $LOG_LINE | grep -Fo "DST=$SRV_IP"`
DPT=`echo $LOG_LINE | grep -Fo "DPT=$SRV_PORT"`
if [ "$DST" == "" -o "$DPT" == "" ]; then
continue
fi
#SRC_IP=`echo $LOG_LINE | grep -Fo "SRC=" | sed -e "s/SRC=//g"`
SRC_IP=`echo $LOG_LINE | grep -Fo "SRC="`
if [ "$SRC_IP" != "" ]; then
# Found a matching line. Try to ping the server
PING_RSLT=`ping -c $PINGS_CNT -W 1 $SRV_IP 2> /dev/null | awk '/packets received/ {print $4}'`
if [ "$PING_RSLT" != "$PINGS_CNT" ]; then
# Guess it's sleeping. Send WoL.
#echo "[`date -Iseconds`] $SRC_IP causes PLEX SRV WoL." >> $LOG
#logger -p user.info -t PLEX "[`date -Iseconds`] $SRC_IP causes PLEX SRV Wake on LAN."
logger -p user.info -t PLEX "[`date -Iseconds`] PLEX SRV Wake on LAN was triggered."
$WOL $SRV_MAC #>> $LOG
#else
#echo "[`date -Iseconds`] PLEX SRV $SRV_IP was accessed by $SRC_IP and is alive." >> $LOG
#logger -p user.info -t PLEX "[`date -Iseconds`] SRV is alive"
fi
fi
done