понедельник, 22 декабря 2014 г.

openwrt butler

Обучим роутер опознавать хозяина
Именно с этой мыслью я начал обучать свой TP-link всяким премудростям.

Имя моего пациента TL-WR1043ND rev1.0, он заботливо перепрошит сразу после покупки. Некоторое время назад я пробовал из него сделать торренто качалку, самба сервер, но это всего лишь роутер, которой загибался под поставленными задачами. Думал так же перенести операционку на флешку, что бы поставить питонячьий интерпретатор. Но это значительно бы снизило производительность. В итоге, я пришел к выводу что оборудование должно справляться с задачами, для которых оно предназначен Но ведь просто скрип то можно он выдержит.
Гугл на вопрос "как узнать список wifi клиентов" выдал странные и временами морально устаревшие инструкции. Но часть из них все же работали.
arp [-n]
iw dev wlan0 station dump
Будем пользоваться вторым способом, а пока сделаем небольшую подготовку и запишем mac своего телефона
opkg update
opkg install shadow-useradd
useradd mcgr0g
passwd mcgr0g
mkdir /home/mcgr0g
vi /etc/passwd
mcgr0g:x:1000:1000:mcgr0g:/home/mcgr0g:/bin/ash
visudo # исходя из уровня паранойи выбираем что раскоментировать
chown mcgr0g:root /home/mcgr0g/
touch /home/mcgr0g/check_master.sh
cd /home/mcgr0g/
vi check_master.sh
#####your mac####
12:ab:c3:45:d6:78
{ESC}
:q
cat check_master.sh
chmod ugo+rx mcheck_master.sh
Теперь воспользуемся показательным скриптом show_wifi_clients.sh из вики и препишем его под себя.
#!/bin/sh
###your smatphone mac####
master="a1:b2:c3:d4:e5:f6"
res=0
# list all wireless network interfaces
for interface in `iw dev | grep Interface | cut -f 2 -s -d" "`
do
        # for each interface, get mac addresses of connected stations/clients
        maclist=`iw dev $interface station dump | grep Station | cut -f 2 -s -d" "`
        # for each mac address in that list...
        for mac in $maclist
        do
                if [ $mac == $master ];
                then
                        res=1
                fi
        done
done
echo $res
Вуаля! Можно отслеживать, подключен ли смарт к домашнему вайфаю.
Теперь надо поставить пакет msmtp, что бы можно было слать письма. В хоямке создаем конфиг:
touch .msmtprc
chmod 600 .msmtprc # иначе ругается
vi .msmtprc
i # а дальше можно скопипастить
account server
host smtp.yandex.ru # спасибо яндексу за pdd ;)
port 25

auth on
user server@mcgrog.ololo
password hardpass
from server@mcgrog.now.im

tls on
tls_starttls on # особый привет яндексу, для гмыла эта строка не нужна
tls_certcheck off

logfile ~/.msmtp.log
И пробуем отправить в режиме отладки:
echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --debug -t test@mcgrog.now.im
Ништяк, все ходит. Теперь сделаем письмо delay.mail содержания:
To: test@mcgrog.now.im
From: server@mcgrog.now.im
Subject: panic

delayed
don't worry
и попробуем отправить командой
cat delay.mail | msmtp -C /home/mcgr0g/.msmtprc -a server -t test@mcgrog.now.im
И снова успех! Все бы ничего, но подбешивает меня везде плодить одно и тоже, и посему сделаем так:
#!/bin/sh

WORK_DIR="/home/mcgr0g"
MAIL_TO=test@mcgrog.now.im
MAIL_FROM=server@mcgrog.now.im
MAIL_SUBJECT="panic"
MAIL_TEXT="delayed"
MAIL_MESSAGE="To: ${MAIL_TO}
\nFrom: ${MAIL_FROM}
\nSubject: ${MAIL_SUBJECT}
\nContent-Type: text/plain; charset=UTF-8
\n\n${MAIL_TEXT}"

echo -e ${MAIL_MESSAGE} | msmtp -C ${WORK_DIR}/.msmtprc -a server -t ${MAIL_TO}
Если вы не забыли раздать права, то вся магия произойдет по команде ./delay.sh
Возможно вы задаетесь вопросом: а зачем мне delay? Все просто: что бы по стуку можно было откладывать панику.
Теперь возьмемся за реакцию дворецкого на отсутствие хозяина:
#!/bin/sh

WORK_DIR="/home/mcgr0g"
MAIL_TO=test@mcgrog.now.im
MAIL_FROM=server@mcgrog.now.im
MAIL_SUBJECT="panic"
MAIL_TEXT="delayed"
MAIL_MESSAGE="To: ${MAIL_TO}
\nFrom: ${MAIL_FROM}
\nSubject: ${MAIL_SUBJECT}
\nContent-Type: text/plain; charset=UTF-8
\n\n${MAIL_TEXT}"

echo -e ${MAIL_MESSAGE} | msmtp -C ${WORK_DIR}/.msmtprc -a server -t ${MAIL_TO}
Для проверки в рабочей директории надо предварительно положить прощальную записку panic.txt со всеми явками и паролями.

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

Дополнение: iw dev wlan0 station dump не всегда хорош, переделайте на arp

Источники:
Ман
Рецепт