Python 如何嗅探Wi-Fi AP名称和相关设备

Python 如何嗅探Wi-Fi AP名称和相关设备,python,arduino,raspberry-pi,wifi,esp8266,Python,Arduino,Raspberry Pi,Wifi,Esp8266,我最近正在做一个流量监测项目,该项目基于计算有多少wi-fi设备。我想获得可用AP SSID和连接到该AP的所有客户端设备的列表。基本上,我想得到如下信息列表: Network-Name BSSID RSSI Client-Mac1 RSSI Client-Mac2 RSSI Client-Mac3 RSSI Orphan Clients: Client-Mac4 RSSI 我希望这可以通过使用树莓pi和使用python的Wi-Fi适配器来实现。如果

我最近正在做一个流量监测项目,该项目基于计算有多少wi-fi设备。我想获得可用AP SSID和连接到该AP的所有客户端设备的列表。基本上,我想得到如下信息列表:

Network-Name    BSSID    RSSI
    Client-Mac1 RSSI
    Client-Mac2 RSSI
    Client-Mac3 RSSI
Orphan Clients:
    Client-Mac4 RSSI
我希望这可以通过使用树莓pi和使用python的Wi-Fi适配器来实现。如果不可能,我有一个ESP 8266,可以将它链接到Linux机器/Arduino


请发表您的想法,说明如何使用什么类型的平台/库来实现这一点。如果您能包含一些代码示例,那将是最好的

复制自esp8266示例-ESP8266Wifi-WifiScan: 然后可以使用串行连接将其发送到主进程

    /*
 *  This sketch demonstrates how to scan WiFi networks. 
 *  The API is almost the same as with the WiFi Shield library, 
 *  the most obvious difference being the different file you need to include:
 */
#include "ESP8266WiFi.h"

void setup() {
  Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  Serial.println("Setup done");
}

void loop() {
  Serial.println("scan start");

  // WiFi.scanNetworks will return the number of networks found
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n == 0)
    Serial.println("no networks found");
  else
  {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
      delay(10);
    }
  }
  Serial.println("");

  // Wait a bit before scanning again
  delay(5000);
}
/*
*此草图演示如何扫描WiFi网络。
*API与WiFi屏蔽库几乎相同,
*最明显的区别是需要包含的文件不同:
*/
#包括“ESP8266WiFi.h”
无效设置(){
序列号开始(115200);
//将WiFi设置为站点模式,如果AP之前已连接,则断开与AP的连接
WiFi.模式(WiFi_STA);
WiFi.disconnect();
延迟(100);
Serial.println(“设置完成”);
}
void循环(){
Serial.println(“扫描开始”);
//WiFi.scanNetworks将返回找到的网络数
int n=WiFi.scanNetworks();
Serial.println(“扫描完成”);
如果(n==0)
Serial.println(“未找到网络”);
其他的
{
连续打印(n);
Serial.println(“发现网络”);
对于(int i=0;i