Hi everyone. My device is TP-Link M7350 8.0.2 Build 230911 Rel.33n Rayhunter v0.10.2
I decided to make some additions for myself. Maybe someone will find it useful. Implementation: wifi_toggle.sh is launched that monitors the menu button press. Hold the menu button for 4 seconds. Wi-Fi is turned off. send_alert.sh is launched that monitors the log file. If an error occurs, it sends an SMS with the error to a number. Wi-Fi is turned on in the same way (hold the menu button for 4 seconds). Telnet starts working after 4-5 minutes after booting.
1. Lines are added to the launch. sleep 120 ( /bin/sh /data/rayhunter/wifi_toggle.sh ) > /dev/null 2>&1 & and pkill -f /data/rayhunter/wifi_toggle.sh > /dev/null 2>&1 || true
start)
echo -n "Starting rayhunter: "
# Below line may be replaced by the installer with device-specific startup commands, such as mounting the SD card.
(mount /dev/mmcblk0p1 /media/card || true) 2>&1 | tee /tmp/rayhunter-mount.log
start-stop-daemon -S -b --make-pidfile --pidfile /tmp/rayhunter.pid \
--startas /bin/sh -- -c "RUST_LOG=info exec /data/rayhunter/rayhunter-daemon /data/rayhunter/config.toml > /data/rayhunter/rayhunter.log 2>&1"
sleep 120
( /bin/sh /data/rayhunter/wifi_toggle.sh ) > /dev/null 2>&1 &
echo "done"
;;
stop)
echo -n "Stopping rayhunter: "
start-stop-daemon -K -p /tmp/rayhunter.pid
pkill -f /data/rayhunter/wifi_toggle.sh > /dev/null 2>&1 || true
echo "done"
2. Create two files (in this case on a memory card)
#!/bin/sh
DEV="/dev/input/event1"
T_START=0
echo "[$(date +%T)] СИСТЕМА УДЕРЖАНИЯ 3 СЕК (Raw Mode) ЗАПУЩЕНА"
echo "Использую устройство: $DEV"
# Бесконечный цикл чтения по 16 байт (размер одного события в Linux)
while true; do
# Читаем ровно 16 байт и переводим в понятные цифры
# Мы берем 5-ю колонку (тип), 6-ю (код) и 7-ю (значение)
EVENT=$(dd if=$DEV bs=16 count=1 2>/dev/null | hexdump -e '8/2 "%04x "')
# Извлекаем код кнопки и состояние (нажата/отпущена)
# Формат вывода hexdump: ... TYPE CODE VAL ...
TYPE=$(echo $EVENT | awk '{print $5}')
CODE=$(echo $EVENT | awk '{print $6}')
VAL=$(echo $EVENT | awk '{print $7}')
# Нас интересует только кнопка Menu (код 0067)
if [ "$CODE" = "0067" ] && [ "$TYPE" = "0001" ]; then
# Нажатие (VAL=0001)
if [ "$VAL" = "0001" ]; then
T_START=$(date +%s)
echo "--> Нажал..."
# Отпускание (VAL=0000)
elif [ "$VAL" = "0000" ] && [ "$T_START" -ne 0 ]; then
NOW=$(date +%s)
DUR=$((NOW - T_START))
echo "--> Отпустил (держал $DUR сек.)"
if [ "$DUR" -ge 3 ]; then
echo "[!!!] ЦЕЛЬ ДОСТИГНУТА: Переключаю Wi-Fi"
if ifconfig wlan0 | grep -q "UP"; then
echo "WIFI OFF"
ifconfig wlan0 down
( /bin/sh /data/rayhunter/send_alert.sh ) > /dev/null 2>&1 &
else
echo "WIFI ON"
ifconfig wlan0 up
pkill -f /data/rayhunter/send_alert.sh > /dev/null 2>&1 || true
fi
fi
T_START=0
fi
fi
done
#!/bin/sh
# === НАСТРОЙКИ ===
PHONE="+7123456789"
MODEM="/dev/smd7"
LOG_DIR="/media/card/qmdl"
echo "[$(date +%T)] СИСТЕМА СЛЕЖКИ ЗА ПРОЦЕССОМ ЗАПУЩЕНА"
while true; do
# 1. Находим текущий PID Райхантера
RPID=$(pidof rayhunter-daemon)
if [ -z "$RPID" ]; then
echo "[$(date +%T)] Жду запуска процесса rayhunter-daemon..."
sleep 5
continue
fi
# 2. Узнаем, какой именно файл .ndjson сейчас открыт процессом
# Мы смотрим, куда указывает ссылка в файловой системе процесса
ACTIVE_FILE=$(ls -l /proc/$RPID/fd/ 2>/dev/null | grep "\.ndjson" | head -1 | awk '{print $NF}')
if [ -z "$ACTIVE_FILE" ]; then
echo "[$(date +%T)] Процесс жив, но файл лога еще не открыт. Жду..."
sleep 2
continue
fi
echo "----------------------------------------------------"
echo "[$(date +%T)] АКТИВНЫЙ ФАЙЛ ОБНАРУЖЕН: $ACTIVE_FILE"
echo "----------------------------------------------------"
# 3. Запускаем фоновый "сторож", который убьет tail, если файл сменится
(
while true; do
sleep 3
# Проверяем, какой файл активен сейчас
NEW_ACTIVE=$(ls -l /proc/$RPID/fd/ 2>/dev/null | grep "\.ndjson" | head -1 | awk '{print $NF}')
# Если файл сменился или процесс исчез
if [ "$NEW_ACTIVE" != "$ACTIVE_FILE" ]; then
echo ""
echo "[SYSTEM] Внимание! Райхантер переключился на новый файл или перезапустился."
# Убиваем tail, чтобы выйти из цикла чтения
pkill -P $$ tail 2>/dev/null
exit
fi
done
) &
WATCHDOG_PID=$!
# 4. Читаем активный файл
tail -n 0 -f "$ACTIVE_FILE" 2>/dev/null | while read -r LINE
do
# Точка для визуального контроля
printf "."
case "$LINE" in
*event_type*|*level*|*Warning*|*High*|*Medium*)
echo ""
EV_TYPE=$(echo "$LINE" | sed -n 's/.*"\(event_type\|level\)":"\([^"]*\)".*/\2/p')
MSG=$(echo "$LINE" | sed -n 's/.*"message":"\([^"]*\)".*/\1/p')
[ -z "$EV_TYPE" ] && EV_TYPE="Alert"
[ -z "$MSG" ] && MSG="Security Event"
echo "[$(date +%T)] СОБЫТИЕ: [$EV_TYPE] $MSG"
# Отправка СМС
chat '' 'AT' 'OK' 'AT+CMGF=1' 'OK' 'AT+CMGS="'$PHONE'"' '>' "$EV_TYPE: $MSG $(printf '\x1a')" 'OK' < $MODEM > $MODEM
sleep 10
;;
esac
done
# Очистка после смены файла
kill $WATCHDOG_PID 2>/dev/null
echo "[$(date +%T)] Переподключение к новому активному дескриптору..."
sleep 2
done