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 地址
我是 运行 来自 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 地址