LINUX.ORG.RU

Чем или как отловить событие «подключения wifi клиента к точке»

 ,


6

5

Суть следующая. Есть железка raspberry pi, в ней стоит raspbian (Debian 8 arm). На железке настроена точка доступа wifi (hostap). Как мне в pythone или хотя бы в баше (или в си) отловить событие подключения к точке доступа определенного клиента?

PS: Может и не через wifi это отлавливать, а через dhcp server. PPS: Хочу что бы при появлении моего телефона в радиусе действия точки гирлянда на елочке загоралась.


Хочу что бы при появлении моего телефона в радиусе действия точки гирлянда на елочке загоралась.

Это win, ящитаю. Подписался.

comp00 ★★★★
()

ЕМНИП у hostapt должен быть какой-то интерфейс по аналогии с wpa_supplicant, у которого есть unix socket и d-bus.

Dead ★★★★
()

Попробуй так:

iwinfo wlan0/wl0/ath0 assoclist
или так:
iw dev wlan1 station dump

Дальше можно grep'ать вывод.

upd. eщё можно парсить таблицу arp.

hope13 ★★★
()
Последнее исправление: hope13 (всего исправлений: 1)
Ответ на: комментарий от hope13

iwinfo wlan0/wl0/ath0 assoclist

Эта утилита только в openwrt вроде существует

iw dev wlan1 station dump

iw вообще ничего не показывает, вижу только из dhcp-lease-list - те кто арендовал, но там нужных данных нет.

arsik
() автор топика

100500 способов, хоть грепать /var/lib/dhcp/dhcpd.leases . Вот тебе пруф оф концепт:

while true; do 
  grep <your_mac> /var/lib/dhcp/dhcpd.leases && {burn_xmas_tree} || {stop it}
  sleep 5
done
true_admin ★★★★★
()

Во, вспомнил, у hostapd есть сокет по которому им можно управлять и на который прилетают события: https://w1.fi/wpa_supplicant/devel/hostapd_ctrl_iface_page.html Интерфейс, вроде, совместим с wpa_supplicant, поэтому можешь гуглить python+wpa_supplicant или hostapd+wpa_supplicant.

Но, когда я решал подобную задачу, я писал в сокет напрямую из питона потому что 1) это простой текстовой интерфейс 2) все обёртки были кривыми. Так что....

А можно вообще через какой-нить socat или прочее ограничиться только башем. Гугли bash read from unix socket.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Сделал, но по другому, через rsyslog. Посмотрел, что пишется в логи при подключении (отключении) клиента Добавил /etc/rsyslog.d/hostap.conf со следующим содержанием

if $programname == 'hostapd' and $msg contains 'STA 11:22:33:44:55:66 IEEE 802.11: associated' then ^/opt/elka/start.py
if $programname == 'hostapd' and $msg contains 'STA 11:22:33:44:55:66 IEEE 802.11: disassociated' then ^/opt/elka/stop.py

11:22:33:44:55:66 - это MAC моего телефона.

arsik
() автор топика
Ответ на: комментарий от arsik

Немного поправил. Правильнее будет так

module(load="omprog")

if $programname == 'hostapd' and $msg contains 'STA 11:22:33:44:55:66 IEEE 802.11: associated' then action(type="omprog" binary="/opt/elka/start.py")

if $programname == 'hostapd' and $msg contains 'STA 11:22:33:44:55:66 IEEE 802.11: disassociated' then action(type="omprog" binary="/opt/elka/stop.py")

arsik
() автор топика
Ответ на: комментарий от ggrn

Обычное реле. Типа такого http://www.sunfounder.com/index.php?c=showcs&id=27&model=2 Channel Relay Можно и попроще, главное что бы от 5 вольт работало. Схема подключения вот тут расписана. http://www.sunfounder.com/index.php?c=case_incs&a=case_nr&type=23 Конкретно к реле схемы нет, но это практически то же самое, что и светодиод зажечь. Там же и готовые примеры на си и питоне. То же самое есть и по русски. GPIO для чайников http://raspberrypi.ru/profile/RomanNV5/created/topics/ Правда там примеры только для си, но зато понятно.

Я взял себе комплект, вот такой http://www.sunfounder.com/index.php?c=showcs&id=46&model=Ultrasonic K... Теперь вечерами балуюсь.

arsik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.