"Кто дома?" через Zyxel Keenetic
-
Получаем информацию с роутера о телефонах которые находятся в домашней сети
Для получение данных необходимо создать устройство
Актуатор универсальный бинарный
и необходимо заполнить следующие параметры:mac
- мак адрес устройства (телефона) для поиска
ip
- йп роутера
port
- порт роутера, 80 по умолчанию
login
- логин роутера
password
- пароль роутераУбедитесь что установлена актуальная версия прошивки.
/** * New snippet */ const crypto = require('crypto'); const http = require('http'); module.exports = callback => { const mac = '88:28:b3:41:fb:00'; // mac-address phone or any device const ip = '192.168.0.1'; // ip router const port = 80; // port router const login = 'admin'; // login router const password = '12345' // pass router let sessionid = '' let realm = ''; let token = ''; function getHash() { const a = `${login}:${realm}:${password}`; const b = crypto.createHash('md5').update(a).digest('hex'); const c = token + b; const d = crypto.createHash('sha256').update(c).digest('hex'); return d; } function auth() { const postData = JSON.stringify({ login, password: getHash(), }, null, 2); const options = { host: ip, port: port, path: '/auth', method: 'POST', headers: { 'Content-Length': Buffer.byteLength(postData), 'Cookie': `_authorized=${login}; sysmode=router; session_id=${sessionid}`, 'Cache-Control': 'no-cache', 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json;charset=UTF-8', } }; const req = http.request(options, (res) => { res.setEncoding('utf8'); res.on('data', (chunk) => {}); res.on('end', () => { api(); }); }); req.write(postData); req.end(); } function api() { const options = { host: ip, port: port, path: `/rci/show/ip/hotspot?mac=${mac}`, method: 'GET', headers: { 'Cookie': `_authorized=${login}; sysmode=router; session_id=${sessionid}`, 'Cache-Control': 'no-cache', 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json;charset=UTF-8', } }; http.get(options, (resp) => { let body = ''; resp.on('data', (chunk) => { body += chunk; }); resp.on('end', () => { const data = JSON.parse(body); if (data.host !== undefined && data.host[0]) { callback(null, data.host[0].link === 'up' ? 1 : 0); } else { callback(null, 0); } }); }); } http.get(`http://${ip}:${port}/auth`, (resp) => { let body = ''; resp.on('data', (chunk) => {}); resp.on('end', () => { token = resp.headers['x-ndm-challenge']; realm = resp.headers['x-ndm-realm']; sessionid = resp.headers['set-cookie'][0].split(';')[0].slice(11); auth(); }); }); };
-
Можно еще для mikrotikа инструкцию.
-
@amgstone Добрый день, добавим обязательно
-
Добрый вечер всем! я заметил что когда работают снипеты к кинетику происходит зависание самого роутера через пару дней. у кого нибудь такое же наблюдается?
-
Пользователь @m_n61rus написал в "Кто дома?" через Zyxel Keenetic:
Добрый вечер всем! я заметил что когда работаю`
У меня KN1010 , не замечал
-
@dev Решил по интересоваться. Скоро ли будет для микротика снипплет ?
-
Приветствую!
у кого нибудь работает снипет?
-
@m_n61rus Добрый день, на момент написание сниппета все работало
-
На момент написания снипета у меня работала .
но после последних прошивок перестал работать ть
-
@m_n61rus Спасибо за информацию, будем иметь ввиду
-
Добрый день, вынужден был обновиться на новую версию 3.6.3 и сниппет не работает. Что нужно подправить ?
-
@Anatol Добрый день, возможно поменялся формат авторизации и структура запросов, к сожалению на текущий момент мы не можем заняться данным вопросом, предлагаем вернуться к нему позже.
-
Заменил сниппет, скриптом на самом роутере, теперь он по протоколу Mqtt отправляет сам сообщение, когда появляется и когда выходит из сети устройство с определенным MAC адресом.
-
а скриптик можно по смотреть?
-
Скрипт написал Khaninea из форума по keenetic, чуть подправил вывод на mqtt.
#!/bin/sh
DEV1="00:00:00:00:00:00"
DEV2="00:00:00:00:00:00"replacement() {
case "$1" in
$DEV1 ) echo "1";;
$DEV2 ) echo "2";;
esac
}#map del to 0 and new to 1
replacement2() {
case "$1" in
new ) echo "1";;
del ) echo "0";;
esac
}if [[ "$address" = "ipv4" && "$update" = "none" ]]; then
#получаем mac устройства по ID
mac=$(wget -qO - http://127.0.0.1:79/rci/show/ip/neighbour | jq --arg num "$id" '.[$num].mac')
#проверяем mac на принадлежность нужному нам хосту
who=$(replacement "$mac")
[ -z "$who" ] && exit 0
#replace mac to idx
action2=$(replacement2 "$action")#публикуем mqtt сообщение в топик zyxel
mosquitto_pub -d -t zyxel/$who -m "{"idx": $who, "sost": $action2}" -h 192.168.1.150 -p 1883 -r
fiСсылку не знаю можно ли выкладывать, но поиск по запуск скрипта при появлении нового клиента wifi
-
спасибо большое,поиграемся!
-
а для микротик когда появится?
-
Ребята добрый день! можете разжевать как добавить скрипт для кинетика, и видеть присутствие клиентов
-
@muxa82 В версии 3.7 можно пакет opkg установить во внутреннюю память. Я на релизе 3.6, поэтому пакет opkg установил на флешку. Начни с помощи https://help.keenetic.com/hc/ru/articles/360000948719-OPKG, а затем на форуме найди поиск по запуск скрипта при появлении нового клиента wifi, или подправленный здесь.
-
Привет всем! поигравшись со скриптами у меня так и не получилось получить инфу от кинетика. Но я нашел информацию как по другому парсить данные с кинетика (может кому интересно)
- надо создать в разделе "Доменное имя " подключение к облаку кинетика
- создать доменное имя 4 уровня (например rci, должно получиться что то типа rci."name".keenetic.pro)
- выставить "свободный доступ " в доступе из интернета
4 протокол http - порт 79
все после этого перейдя например по ссылке http://rci."name".keenetic.pro/rci/show/ip/arp вы получите json который можно парсить