• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос ESP web сервер, работа с MAC адресами клиентов

AlexandreVN

Member
Каким образом посмотреть MAC подключенного клиента? Клиентов подключенных может быть несколько, как посмотреть их адреса. Второй непонятный для меня вопрос, как узнать MAC конкретного клиента который шлет GET запрос? Т.е. получаем запрос от клиента, в зависимости от MAC отправляем ответ. Третий вопрос: как отключать клиента с определенным MAC адресом?
 

Алексей.

Active member
А на что оно вам нужно?
В примерах libraries/ESP8266WiFi/examples/WiFiEvents/WiFiEvents.ino есть обработчик события подключения wifi клиента к точке доступа, там в сериал выводится мак подключенного клиента, но к этому моменту ip адрес в аренду ему ещё не выдан. Как отключить клиента ненужного, тем более, что по умолчанию всего 4 разрешено, в SDK api не нашлось.
Посмотреть какие адреса выдавались клиентам в аренду можете в примере libraries/ESP8266WiFi/examples/StaticLease/StaticLease.ino
Второй непонятный для меня вопрос, как узнать MAC конкретного клиента который шлет GET запрос?
В запросе нет никаких мак-ов, они уровнем ниже :)
Для чего защищаться фильтруя мак, может просто поменять пароль на точке доступа?
 

AlexandreVN

Member
это видел. есть идея разделять клиентов по уровню дозволенности на основе MAC. Прошел авторизацию значит можешь пользовать страницу управления. И т.д. Но поскольку клиентов одновременно много быть не может, значит кого-то надо сбросить на время, если нет активности.
В запросе нет никаких мак-ов,
это я понимаю. После того как клиент загрузил главную страницу срабатывает функция onload и от него приходит get запрос. А ESP получив get уже разбирается что дальше отдавать клиенту на основании его MAC адреса. Вот что я имею ввиду. Как в этом месте выцепить MAC клиента от котого пришел GET?
 

CodeNameHawk

Moderator
Команда форума

AlexandreVN

Member
уже был ответ

В этом месте можете по ип адресу клиента разделять.
можно и так. но IP каждый раз новый может быть. Зная IP можно средствами ESP получить мак (таблца)?
Сам меняю мак-и порой если требуется, пока админы спят
Много не даст. При смене мак придется заново подключаться к ESP и заново логиниться.
 

AlexandreVN

Member
Еще раз вопрос: можно ли идентифицировать клиента по мак, пусть не напрямую, а через таблицу IP. Для чего это надо: Как пример, три раза неправильно пароль ввел -10минут отдохни.
 

Алексей.

Active member
можно и так. но IP каждый раз новый может быть. Зная IP можно средствами ESP получить мак (таблца)?
Я же отвечал как посмотреть какие адреса выдавались клиентам в аренду, там мак-и в сериал выводятся
libraries/ESP8266WiFi/examples/StaticLease/StaticLease.ino
Клиент по тцп/ип соединился, выполнили wifi_softap_get_station_info и ищем по ип клиента его мак, если не нашли, значит он не использует dhcp, задает адрес статически.
 

CodeNameHawk

Moderator
Команда форума
Web server может быть на esp, которая работает в STA режиме, тогда наверное только по IP.
 

Алексей.

Active member
Под этот пример нужен специальный компилятор?
Не понял вопроса.
Собираю для ноды-мсу просто ардуиной 1.8.8, версия коре есп8266 2.5.0
Код:
/opt/arduino-1.8.8/arduino --verbose-build --verify --pref build.path=/tmp/StaticLease --board esp8266:esp8266:nodemcuv2:xtal=80,vt=flash,exception=disabled,eesz=4M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 /home/alex/Arduino/hardware/esp8266/esp8266/libraries/ESP8266WiFi/examples/StaticLease/StaticLease.ino

Скетч использует 289780 байт (27%) памяти устройства. Всего доступно 1044464 байт.
Глобальные переменные используют 27944 байт (34%) динамической памяти, оставляя 53976 байт для локальных переменных. Максимум: 81920 байт.
 

AlexandreVN

Member
Не понял вопроса.
Собираю для ноды-мсу просто ардуиной 1.8.8, версия коре есп8266 2.5.0
Код:
Ардуина 1.8.5, ESP 2.4.2 , ошибок навалило.
[SPOILER="Ошибки компиляции"]

Arduino: 1.8.5 (Windows XP), Плата:"Generic ESP8266 Module, 80 MHz, Flash, ck, 26 MHz, 40MHz, QIO, 4M (3M SPIFFS), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Изменены опции сборки, пересобираем все
J:\Arduino\1_скетчи\sketchbook\esp8266_mac_ip_proba\esp8266_mac_ip_proba.ino: In function 'void handleRoot()':

esp8266_mac_ip_proba:52: error: no matching function for call to 'IPAddress::IPAddress(ip_addr&)'

J:\Arduino\1_скетчи\sketchbook\esp8266_mac_ip_proba\esp8266_mac_ip_proba.ino:52:42: note: candidates are:

In file included from C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ESP8266WiFi\src/ESP8266WiFi.h:31:0,

                 from J:\Arduino\1_скетчи\sketchbook\esp8266_mac_ip_proba\esp8266_mac_ip_proba.ino:18:

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:49:9: note: IPAddress::IPAddress(const uint8_t*)

         IPAddress(const uint8_t *address);

         ^

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:49:9: note:   no known conversion for argument 1 from 'ip_addr' to 'const uint8_t* {aka const unsigned char*}'

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:48:9: note: IPAddress::IPAddress(uint32_t)

         IPAddress(uint32_t address);

         ^

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:48:9: note:   no known conversion for argument 1 from 'ip_addr' to 'uint32_t {aka unsigned int}'

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:47:9: note: IPAddress::IPAddress(uint8_t, uint8_t, uint8_t, uint8_t)

         IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet);

         ^

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:47:9: note:   candidate expects 4 arguments, 1 provided

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:46:9: note: IPAddress::IPAddress()

         IPAddress();

         ^

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:46:9: note:   candidate expects 0 arguments, 1 provided

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:29:7: note: constexpr IPAddress::IPAddress(const IPAddress&)

 class IPAddress: public Printable {

       ^

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:29:7: note:   no known conversion for argument 1 from 'ip_addr' to 'const IPAddress&'

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:29:7: note: constexpr IPAddress::IPAddress(IPAddress&&)

C:\Documents and Settings\UserXP\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/IPAddress.h:29:7: note:   no known conversion for argument 1 from 'ip_addr' to 'IPAddress&&'

J:\Arduino\1_скетчи\sketchbook\esp8266_mac_ip_proba\esp8266_mac_ip_proba.ino: In function 'void setup()':

esp8266_mac_ip_proba:93: error: 'wifi_softap_add_dhcps_lease' was not declared in this scope

exit status 1
no matching function for call to 'IPAddress::IPAddress(ip_addr&)'

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

[/SPOILER]
 

Алексей.

Active member
Пример из есп8266 коре 2.5.0 однако, а вы с 2.4.2 пытаетесь собрать, никаких чудес.
 

AlexandreVN

Member
Не в ядре дело было, похоже копипастом что-то кривенько вставилось. Зато обновился.
 

Алексей.

Active member
В 2.4.2 такого примера нет, собирать нечего, а в 2.5.0 есть, я и собрал пример, зачем пока не знаю.
 
Сверху Снизу