понедельник, 22 февраля 2016 г.

чем плох iw на openwrt и как с этим быть

Ранее когда мы конфигурировали openwrt butler был выбор что использовать: iw или arp. После подключения mr3020 в подсеть телефон также отдавал свой мак-адрес только его нельзя было вычислить посредством утилит для беспроводной сети. Пришлось переделывать на arp.

Казалось бы ничего сложного вводишь arp -a и все готово. Но нет. Как оказалось ключ "-a" не распознавался, видимо из-за локалей. Если попробовать
LC_ALL=C arp -a $ipAddress | awk '{print $4}'
то все а ажуре. Да вот только это не не вставить в скрипт. Ладно, если по гуглить, то можно найти как сделать скрипт для поиска всех ip подключенных клиентов.
видно, что ключевой строке
awk ' $1~/[[:digit:]]/ {print $1}' /proc/net/arp
используется какой то print $1. Очено похоже на скрипт с локалями - там выводится 4я колока. Изменяем на 4ю колонку и вуаля:
awk ' $1~/[[:digit:]]/ {print $4}' arp
работает.
Ну а теперь можно переделать весть скрипт:
#!/bin/sh
###your smatphone mac####
master="a1:b2:c3:d4:e5:f6"
res=0
maclist=`awk ' $1~/[[:digit:]]/ {print $4}' /proc/net/arp`
        # for each mac address in that list...
        for mac in $maclist
        do
        if [ $mac == $master ];
        then
                res=1
        fi
        done
echo $res
и теперь смарт успешно находится даже если находится в подсети другого роутера :)