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 <Platform/System.h>
20 #include <MacAddress.h>
21 #include "WVector.h"
22 
29 #define ETH_MAC_LEN 6
30 
34 struct BeaconInfo {
36  uint8_t ssid[33];
37  uint8_t ssid_len;
38  uint8_t channel;
39  int8_t err;
40  int8_t rssi;
41  uint8_t capa[2];
42 };
43 
47 struct ClientInfo {
51  uint8_t channel;
52  int8_t err;
53  int8_t rssi;
54  uint16_t seq_n;
55 };
56 
57 template <class T> class BeaconOrClientListTemplate : public Vector<T>
58 {
59 public:
60  int indexOf(const MacAddress& bssid)
61  {
62  for(unsigned i = 0; i < this->count(); ++i) {
63  if(this->elementAt(i).bssid == bssid) {
64  return i;
65  }
66  }
67 
68  return -1;
69  }
70 };
71 
76 
81 
82 using WifiSnifferCallback = Delegate<void(uint8_t* data, uint16_t length)>;
83 using WifiBeaconCallback = Delegate<void(const BeaconInfo& beacon)>;
84 using WifiClientCallback = Delegate<void(const ClientInfo& client)>;
85 
87 {
88 public:
90  void begin();
91 
93  void end();
94 
97  {
98  beaconCallback = callback;
99  }
100 
103  {
104  clientCallback = callback;
105  }
106 
111  {
112  snifferCallback = callback;
113  }
114 
118  void setChannel(unsigned channel)
119  {
120  wifi_set_channel(channel);
121  }
122 
124  unsigned getChannel()
125  {
126  return wifi_get_channel();
127  }
128 
129 private:
131  void onSystemReady() override;
132 
134  static void parseData(uint8_t* buf, uint16_t len);
135 
136  static WifiSnifferCallback snifferCallback;
137  static WifiBeaconCallback beaconCallback;
138  static WifiClientCallback clientCallback;
139 };
140 
Definition: WifiSniffer.h:58
int indexOf(const MacAddress &bssid)
Definition: WifiSniffer.h:60
Definition: Delegate.h:20
Interface class implemented by classes to support on-ready callback.
Definition: System.h:56
A network hardware (MAC) address.
Definition: MacAddress.h:39
Vector class template.
Definition: WVector.h:32
unsigned int count() const override
Definition: WVector.h:148
const T & elementAt(unsigned int index) const
Definition: WVector.h:205
Definition: WifiSniffer.h:87
void onBeacon(WifiBeaconCallback callback)
Register notification for beacon (AP) info.
Definition: WifiSniffer.h:96
unsigned getChannel()
Get the current channel being listened on.
Definition: WifiSniffer.h:124
void setChannel(unsigned channel)
Set the channel to listen on.
Definition: WifiSniffer.h:118
void begin()
Initialise the sniffer.
void onSniff(WifiSnifferCallback callback)
Register notification for all incoming data.
Definition: WifiSniffer.h:110
void onClient(WifiClientCallback callback)
Register notification for client info.
Definition: WifiSniffer.h:102
void end()
Stop the sniffer.
Decoded Wifi beacon (Access Point) information.
Definition: WifiSniffer.h:34
uint8_t ssid_len
Definition: WifiSniffer.h:37
uint8_t capa[2]
Definition: WifiSniffer.h:41
uint8_t channel
Definition: WifiSniffer.h:38
uint8_t ssid[33]
Definition: WifiSniffer.h:36
MacAddress bssid
Definition: WifiSniffer.h:35
int8_t rssi
Definition: WifiSniffer.h:40
int8_t err
Definition: WifiSniffer.h:39
Decoded Wifi client information.
Definition: WifiSniffer.h:47
int8_t err
Definition: WifiSniffer.h:52
int8_t rssi
Definition: WifiSniffer.h:53
uint8_t channel
Definition: WifiSniffer.h:51
MacAddress ap
Definition: WifiSniffer.h:50
uint16_t seq_n
Definition: WifiSniffer.h:54
MacAddress station
Definition: WifiSniffer.h:49
MacAddress bssid
Definition: WifiSniffer.h:48