ESP8266 如何使用 esp8266 库 v2.6.3 运行 作为网络服务器获取客户端的 IP

ESP8266 How to get a client's IP with esp8266 library v2.6.3 running as a webserver

我是 运行 来自 ESP8266 的网络服务器,库版本为 v2.6.3。 这是大部分代码:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiServer.h>
#include <WiFiServerSecure.h>
#include <WiFiUdp.h>
#include <ESP8266WebServer.h>
#include <ESP8266WebServerSecure.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266Ping.h>
#include <my_lib_COMMON.h>
#include <my_lib_Esp8266_MCU_ONLY.h>


extern "C" {
  #include<user_interface.h>
}


#define PORT 80
const String MODULE_HOSTNAME = "zzzzzzzzzz";
const char* ssid =  "xxxxxxxxxxxx";
const char* pass =  "xxxxxxxxxxx";


ESP8266WebServer server(PORT);


bool SCAN_NETWORKS = false;
bool CONNECT_TO_NETWORK = true;
bool RUN_WEBSERVER = true;
bool CHANGE_HOSTNAME = false;

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

  Serial.println("\n");

  if (CONNECT_TO_NETWORK)
  {
    if (CONNECT_TO_SSID_AND_OUTPUT_SERIAL(ssid, pass))
    {
      IPs_TO_SERIAL(PORT);
    }
  }

  if (RUN_WEBSERVER)
  {
    /*server.on("/list", HTTP_GET, printDirectory);
    server.on("/edit", HTTP_DELETE, handleDelete);
    server.on("/edit", HTTP_PUT, handleCreate);
    server.on("/edit", HTTP_POST, []()
    {
      returnOK();
    }, handleFileUpload);*/
    server.onNotFound(handleNotFound);

    Serial.print("Activating Webserver... ");
    server.begin();
    Serial.println("OK!");
  }
}


void loop() 
{      
  if (RUN_WEBSERVER)
  {
    server.handleClient();
  }
}

void handleNotFound()
{
  Serial.println("New client with IP:" + IP + " and MAC: " + MAC); <==== client's IP and MAC here
  Serial.println("handleNotFound");
  Serial.println("Client status:");
  if (hasSD && loadFromSdCard(server.uri()))
  {
    return;
  }
  String message = "File not Detected\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++)
  {
    message += " NAME:" + server.argName(i) + "\n VALUE:" + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  Serial.print("Sent to client:");
  Serial.println(message);

  Serial.println("Connection terminated.");
}

htm 文件存储在 SD 卡中,但为了简化代码,我删除了这些代码部分。

几个小时以来,有人一直在尝试扫描服务器。虽然我可以看到 he/she 一直在扫描什么,但我想找到更多信息。

有没有办法获取发出请求的客户端、IP 和 MAC 地址 and/or 我可以获得的任何其他信息?

server.client() returns 当前 WiFiClientSecure

server.client().remoteIP() returns 该客户端对象的 IP 地址