WifiSniffer.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * WifiSniffer.h
8  *
9  * Original code by Ray Burnette http://www.hackster.io/rayburne/projects
10  *
11  * Adapted for use with Sming March 2019 mikee47 <mike@sillyhouse.net>
12  *
13  * See ESP8266 non-OS SDK Version 3.0, section 3.11: Sniffer Related APIs
14  *
15  ****/
16 
17 #pragma once
18 
19 #include "System.h"
20 #include "WVector.h"
21 
28 #define ETH_MAC_LEN 6
29 
33 struct BeaconInfo {
34  uint8_t bssid[ETH_MAC_LEN];
35  uint8_t ssid[33];
36  uint8_t ssid_len;
37  uint8_t channel;
38  int8_t err;
39  int8_t rssi;
40  uint8_t capa[2];
41 };
42 
46 struct ClientInfo {
47  uint8_t bssid[ETH_MAC_LEN];
48  uint8_t station[ETH_MAC_LEN];
49  uint8_t ap[ETH_MAC_LEN];
50  uint8_t channel;
51  int8_t err;
52  int8_t rssi;
54 };
55 
59 class BeaconInfoList : public Vector<BeaconInfo>
60 {
61 public:
62  int indexOf(const uint8_t bssid[])
63  {
64  for(unsigned i = 0; i < count(); ++i) {
65  if(memcmp(elementAt(i).bssid, bssid, ETH_MAC_LEN) == 0) {
66  return i;
67  }
68  }
69 
70  return -1;
71  }
72 };
73 
77 class ClientInfoList : public Vector<ClientInfo>
78 {
79 public:
80  int indexOf(const uint8_t station[])
81  {
82  for(unsigned i = 0; i < count(); ++i) {
83  if(memcmp(elementAt(i).station, station, ETH_MAC_LEN) == 0) {
84  return i;
85  }
86  }
87 
88  return -1;
89  }
90 };
91 
95 
97 {
98 public:
100  void begin();
101 
103  void end();
104 
107  {
108  beaconCallback = callback;
109  }
110 
113  {
114  clientCallback = callback;
115  }
116 
121  {
122  snifferCallback = callback;
123  }
124 
128  void setChannel(unsigned channel)
129  {
130  wifi_set_channel(channel);
131  }
132 
134  unsigned getChannel()
135  {
136  return wifi_get_channel();
137  }
138 
139 private:
141  void onSystemReady() override;
142 
144  static void parseData(uint8_t* buf, uint16_t len);
145 
146  static WifiSnifferCallback snifferCallback;
147  static WifiBeaconCallback beaconCallback;
148  static WifiClientCallback clientCallback;
149 };
150 
For applications to use to manage list of unique clients.
Definition: WifiSniffer.h:77
int indexOf(const uint8_t station[])
Definition: WifiSniffer.h:80
Decoded Wifi beacon (Access Point) information.
Definition: WifiSniffer.h:33
Definition: WifiSniffer.h:96
Vector class template.
Definition: WVector.h:29
uint8_t bssid[ETH_MAC_LEN]
Definition: WifiSniffer.h:34
uint16_t seq_n
Definition: WifiSniffer.h:53
int8_t rssi
Definition: WifiSniffer.h:52
#define ETH_MAC_LEN
Definition: WifiSniffer.h:28
unsigned getChannel()
Get the current channel being listened on.
Definition: WifiSniffer.h:134
uint8_t capa[2]
Definition: WifiSniffer.h:40
Definition: Delegate.h:20
uint8_t channel
Definition: WifiSniffer.h:37
int indexOf(const uint8_t bssid[])
Definition: WifiSniffer.h:62
Delegate< void(const ClientInfo &client)> WifiClientCallback
Definition: WifiSniffer.h:94
void onSniff(WifiSnifferCallback callback)
Register notification for all incoming data.
Definition: WifiSniffer.h:120
Delegate< void(uint8_t *data, uint16_t length)> WifiSnifferCallback
Definition: WifiSniffer.h:92
int8_t err
Definition: WifiSniffer.h:51
uint8_t ssid[33]
Definition: WifiSniffer.h:35
Delegate< void(const BeaconInfo &beacon)> WifiBeaconCallback
Definition: WifiSniffer.h:93
Decoded Wifi client information.
Definition: WifiSniffer.h:46
int8_t err
Definition: WifiSniffer.h:38
uint8_t channel
Definition: WifiSniffer.h:50
uint8_t ssid_len
Definition: WifiSniffer.h:36
For applications to use to manage list of unique beacons.
Definition: WifiSniffer.h:59
void onBeacon(WifiBeaconCallback callback)
Register notification for beacon (AP) info.
Definition: WifiSniffer.h:106
int8_t rssi
Definition: WifiSniffer.h:39
void setChannel(unsigned channel)
Set the channel to listen on.
Definition: WifiSniffer.h:128
Interface class implented by classes to support on-ready callback.
Definition: System.h:55
void onClient(WifiClientCallback callback)
Register notification for client info.
Definition: WifiSniffer.h:112