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

问题描述 投票:0回答:1

我正在从ESP8266运行库版本为2.6.3的Web服务器。这是大多数代码:

#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卡中,但是为了简化代码,我删除了代码的那些部分。

有人尝试扫描服务器数小时。即使我可以看到他/她一直在扫描的内容,我仍想找到更多信息。

是否有办法获得提出请求的客户,IP和MAC地址和/或我能获得的任何其他信息?

ip webserver client esp8266
1个回答
0
投票

server.client()返回当前的WiFiClientSecure

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

© www.soinside.com 2019 - 2024. All rights reserved.