作者[smdll]注:本教程仅供学习,不可用于非法用途!
在这里找到Windows的最新版本,下载Installer安装或ZIP解压都可以。
在IDE里点选“文件”->“首选项”
点选“附加开发板管理器网址”右侧的按钮
输入 http://arduino.esp8266.com/stable/package_esp8266com_index.json 并保存
点选“工具”->“开发板xxxxxx”->“开发板管理器”,等待平台索引更新
翻到页面最下方,找到“esp8266 by ESP8266 Community”,选择版本2.0.0安装(必须是2.0.0!)
安装完毕后打开文件管理器,输入
%USERPROFILE%\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\tools\sdk\include (如找不到则把%USERPROFILE%改成当前用户的主文件夹,比如你的账户叫Administrator,就改成C:\Users\Administrator)
修改“user_interface.h”,在文件末尾#endif前添加如下内容
typedef void (*freedom_outside_cb_t)(uint8 status);
int wifi_register_send_pkt_freedom_cb(freedom_outside_cb_t cb);
void wifi_unregister_send_pkt_freedom_cb(void);
int wifi_send_pkt_freedom(uint8 *buf, int len, bool sys_seq);
保存后重启Arduino IDE,点选“工具”->“开发板xxxxxx”->“NodeMCU 1.0(ESP-12E module)”
CH340芯片驱动程序在这里
CP2102芯片驱动程序在这里
插入NodeMCU,等待驱动程序安装完成后打开设备管理器,记住使用的端口(图例为CP2102的芯片,COM5)
在Arduino IDE里“工具”->“端口”选择对应端口
Arduino IDE使用两个入口函数:setup()和loop(),大致语法与C++类似,具体内置函数列表在“帮助”->“参考”。
setup()和loop()编译后结构大致如下:
int main() {
setup();
while(true)
loop();
}
注:微处理器不存在程序运行结束,当程序崩溃后只能手动重置或通过看门狗(WDT)定时重置。
点选“文件”->“示例”->“ESP8266WiFi”->“WiFiAccessPoint”
根据个人喜好做如下修改:
...
const char *ssid = "ESPap";//这里修改WiFi名称
//const char *password = "thereisnospoon";//如果开放网络就注释这一行
...
WiFi.softAP(ssid);//如果开放网络就去掉第二个参数
//IPAddress myIP = WiFi.softAPIP();
IPAddress myIP(192, 168, 1, 1);//这里修改热点IP地址
...
点击左上角箭头样图标,程序将自动编译并下载到NodeMCU里
手机或电脑连接上建立的热点,打开 http://192.168.1.1/ 即可访问页面
头文件添加DNSServer库
#include <DNSServer.h>
...
DNSServer dns;
...
void setup() {
...
dns.start(53, "*", myIP);
...
}
void loop() {
...
dns.processNextRequest();
...
}
手机或电脑连接上热点后,访问所有非HTTPS协议的页面时均跳转到 http://192.168.1.1/
NodeMCU拥有一个串口,供下载程序和模块与电脑之间的通信用。串口通信代码示例如下:
void setup() {
Serial.begin(115200);//这里的参数是波特率,波特率越高数据传输越快,但波特率过高可能造成数据丢失
}
void loop() {
int incomingByte = 0;//存储接收的字符
if (Serial.available() > 0) {
incomingByte = Serial.read();//读取电脑发来的字符
Serial.print("I received: ");//向电脑发送字符串
Serial.println(incomingByte, DEC);//向电脑发送转成十进制的字符,并在结尾换行
}
}
需要与NodeMCU通信时,打开“工具”->“串口监视器”,设置好端口和波特率后即可发送数据给NodeMCU。
注:ESP8266串口接收缓冲区只有128个字节,接收超过128字节后超出部分将被丢弃
WiFi Deauthenticaion攻击(以下简称deauth攻击)是一种拒绝服务(DoS)攻击,攻击者以AP的名义向客户端发送802.11管理帧中的结束鉴权帧,使得客户端主动结束鉴权断开连接。Deauth攻击可用于以下三种情况:
恶意伪AP:攻击者对客户端进行deauth攻击,客户端断开当前网络链接后自动连接攻击者创建的热点,从而实现数据包嗅探。
密码攻击:为了暴力破解WPA/WPA2密码,攻击者需要抓到WPA四次握手认证包。攻击者对客户端进行deauth攻击后,即可抓取客户端重新连接网络时发送的握手包。
钓鱼攻击:攻击者进行deauth攻击后,客户端连接攻击者创建的热点,使用中间人攻击手机用户密码。
在GitHub上有许多关于deauth攻击的项目,比如esp8266_deauther 。我自己也写了一个deauth攻击的演示deauther_demo。编译运行后打开串口监视器即可看到当前无线网络的扫描结果,发送需要攻击的网络编号即开始攻击。这里我尝试攻击自己的热点MX6,攻击开始后所有已连接的设备均被断开链接,且无法再次连接此热点。
注:deauth攻击以及0x08章的Beacon Flooding攻击需要正确配置0x01章中的代码补充部分,若未正确配置则代码中的wifi_send_pkt_freedom()函数将无法使用。
Beacon帧是802.11管理帧之一,热点在运行时会定期广播Beacon帧,用于公布SSID、频道等参数。Beacon Flooding攻击会不断发送大量随机Beacon帧,用于干扰客户端的扫描列表,甚至能够使某些客户端崩溃。GitHub上有esp8266_beaconSpam等项目,我自己也写了一个攻击演示beaconFlooding_demo。
在电脑上安装Python环境,2.7或3.6都可以。用pip命令安装esptool:
pip install esptool
在这里找到Firmware for ESP8266 boards,下载latest固件。连接NodeMCU,确定串口号以后,CMD里运行以下命令(将COM3替换成自己的串口号,esp8266xxxx.bin改成你下载的那个文件):
esptool --port COM3 erase_flash
esptool --port COM3 --baud 460800 write_flash --flash_size=detect 0 esp8266xxxx.bin --verify
下载完成后,打开串口监视器就可以当作Python解释器来使用了。
注:如果下载过程中出现错误,则把460800波特率修改成115200或更低。如果下载后程序没有运行,则在write_flash后加上”-fm dio“参数。
ESP8266本身以及连接各种模块可以开发出更多东西,完全取决于你的想象力!
在此列举出部分用ESP8266可以实现的项目: