شاید تابحال این مورد نظر شما را جلب کرده باشد، شبکه وای فایی که از آن استفاده میکنید چه مقدار ترافیک را ثبت میکند. یا زمانی که از آن استفادهای ندارید آیا ترافیکی در شبکه شما در حال ردوبدل است؟ و یا این ترافیک دارای چه اطلاعاتی هستند، جواب این نیازها همگی با یک دستگاه جالب و کاربردی به اسم Packet Monitor برطرف خواهند شد. یک برنامه رایانه ای یا به شکل سخت افزار است، که می تواند ترافیکی را که از طریق شبکه رایانه یا بخشی از شبکه عبور می کند را ضبط و ثبت کند. هنگامی که جریان داده ها از طریق شبکه عبور میکند. نوسط آنالیزر ها میتوانیم هر پکت را ذخیره و در صورت نیاز، داده های خام پکت را رمزگشایی کنیم. در این پروژه اقدام به ساخت دستگاه PacketMonitor بوسیله برد ESP8266 میکنیم. ترافیک های موجود در هر کانال را دریافت کرده و سپس با استفاده از نمایشگر Oled بصورت گرافیکی در گراف هایی نمایش خواهیم داد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
شناخت برد Wemos
برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت.
ماژول نمایشگر Oled SSD1306
معمولا در پروژه های اینترنت اشیا و دیگر پروژه های امبدد از برای نمایش متن و مقادیر مختلف از نمایشگر های Oled استفاده می شود، این ماژول ها بدر انواع مختلق بسته به نوع درایور اندازه یافت می شوند که یکی از پرطرفدار ترین آن ها SSD1306 می باشد، این نوع از Oled ها معمولا در اندازه های ۰٫۹۶ و ۱٫۳ اینچ ساخته می شوند همچنین پروتکل ارتباطی Oled ها I2C می باشد. صفحه نمایش دیود ساطع کننده نور (OLED) که ما در این آموزش استفاده خواهیم کرد مدل SSD1306 است، یک صفحه نمایش تک رنگ، ۰٫۹۶ اینچی با ۱۲۸ × ۶۴ پیکسل همانطور که در شکل زیر نشان داده شده است. نمایشگر OLED نیازی به نور پس زمینه ندارد، که نتیجه آن ایجاد تضاد بسیار خوب در محیط های تاریک است. همچنین پیکسل های آن فقط هنگام روشن بودن انرژی مصرف می کنند، بنابراین صفحه نمایش OLED در مقایسه با سایر نمایشگرها، مصرف برق کمتری دارد.
روش کار پروژه PacketMonitor
در این پروژه مقادیر ترافیک که در چنل مشخص شده از بازه ۱ تا ۱۴ وجود دارد، با کمک برد وایفای ESP8266 و برد راهانداز Wemos دریافت شده و در نمایشگر Oled که توسط رابط i2c راهاندازی شده بصورت گرافیکی در اشکالی نسبت به ترافیک دریافتی در هر لحظه نمایش داده میشود. همچنین اگر اختلال یا حملات deauth در چنل مدنظر در جریان باشد، به ما اطلاع رسانی خواهد شد. همچنین با استفاده از کلیدی که به پین D3 در برد Wemos متصل است قادر خواهیم بود شماره چنل در حال آنالیز را تغییر دهیم.
وسایل مورد نیاز
برد wemos
نمایشگر Oled
میکروسوییچ
کتابخانه مورد نیاز
در این آموزش از کتابخانه ssd1306 استفاده خواهیم کرد، مراحل زیر را برای نصب کتابخانه دنبال کنید.
شماتیک و راهاندازی مدار
در این پروژه از نمایشگر Oled با درایور SSD1306 استفاده کردیم که از رابط i2c برای برقراری ارتباط با برد Wemos ما که بر پایه ESP8266 است استفاده میکند. برای اتصال نمایشگر به برد راهانداز ار دو پین D1 , D2 استفاده میکنیم، همچنین برای تغذیه نمایشگر از پین های ۵v و GND استفاده خواهیم کرد اتصالات را مطابق شماتیک و جدول زیر برقرار کنید.
-
شماتیک اتصالات برد Wemos و نمایشگر Oled
در بخش بعدی از اتصالات نیاز داریم تا با اتصال یک میکروسوییچ به برد wemos اقدام به فرماندهی به برد برای تغییر مقادیر چنل شبکه کنیم، برای ایم منظر از پین GPIO 0 در تراشه ESP8266 یا پین D3 در برد Wemos استفاده میکنیم. یکی دیگر از پایه های میکروسوییچ نیز به پین GND برای مشخص شدن سطح منطقی متصل میگردد. اتصالات این بخش را نیز از به کمک جدول و شماتیک پایین برقرار کنید.
-
شماتیک اتصالات برد Wemos و میکروسوییچ
در بخش نهایی برای راهاندازی پروژه نوبت به کد این Packet Monitor میرسد، در این کد از کتابخانه SSD1306 برای راهاندازی Oled و نمایش مقادیر در نمایشگر استفاده کردیم، همچنین طبق معمول کتابخانه ESP8266WiFi نیز برای استفاده از قبلیت وایفای برد فراخوانی شده است.
#include <ESP8266WiFi.h> #include <Wire.h> #include <EEPROM.h> #include "SSD1306.h"میتوان گفت یکی از مهم ترین بخش های کد این قسمت است که راهاندازی وایفای برای انجان عملیات های مربوط صورت میگیرد.
wifi_set_opmode(STATION_MODE); wifi_promiscuous_enable(0); WiFi.disconnect(); wifi_set_promiscuous_rx_cb(sniffer); wifi_set_channel(curChannel); wifi_promiscuous_enable(1);
کد کامل پروژه ساخت دستگاه PacketMonitor با برد ESP8266 و نمایشگر Oled
#include <ESP8266WiFi.h> #include <Wire.h> #include <EEPROM.h> #include "SSD1306.h" extern "C" { #include "user_interface.h" } SSD1306 display(0x3c, 5, 4); // GPIO 5 = D1, GPIO 4 = D2 پین های مربوط #define btn D3 // GPIO 0 = پین Flash در برد های Nodemcu #define maxCh 13 // US = 11, EU = 13, Japan = 14 حداکثر تعداد چنل در استاندارد های متفاو #define ledPin 2 // پین LED #define packetRate 5 // پکت ها قبل شناسایی شدن به عنوان حمله #define flipDisplay true #define minRow 0 #define maxRow 127 #define minLine 0 #define maxLine 63 #define Row1 0 #define Row2 30 #define Row3 35 #define Row4 80 #define Row5 85 #define Row6 125 #define LineText 0 #define Line 12 #define LineVal 47 unsigned long prevTime = 0; unsigned long curTime = 0; unsigned long pkts = 0; unsigned long no_deauths = 0; unsigned long deauths = 0; int curChannel = 1; unsigned long maxVal = 0; double multiplicator = 0.0; bool canBtnPress = true; unsigned int val[128]; void sniffer(uint8_t *buf, uint16_t len) { pkts++; if (buf[12] == 0xA0 || buf[12] == 0xC0) { deauths++; } } void getMultiplicator() { maxVal = 1; for (int i = 0; i < maxRow; i++) { if (val[i] > maxVal) maxVal = val[i]; } if (maxVal > LineVal) multiplicator = (double)LineVal / (double)maxVal; else multiplicator = 1; } void setup() { display.init(); if (flipDisplay) display.flipScreenVertically(); Serial.begin(115200); EEPROM.begin(4096); curChannel = EEPROM.read(2000); if (curChannel < 1 || curChannel > maxCh) { curChannel = 1; EEPROM.write(2000, curChannel); EEPROM.commit(); } pinMode(ledPin, OUTPUT); wifi_set_opmode(STATION_MODE); wifi_promiscuous_enable(0); WiFi.disconnect(); wifi_set_promiscuous_rx_cb(sniffer); wifi_set_channel(curChannel); wifi_promiscuous_enable(1); Serial.println("starting!"); } void loop() { curTime = millis(); if (digitalRead(btn) == LOW) { if (canBtnPress) canBtnPress = false; } else if (!canBtnPress) { canBtnPress = true; curChannel++; if (curChannel > maxCh) curChannel = 1; wifi_set_channel(curChannel); for (int i = 0; i < maxRow; i++) val[i] = 0; pkts = 0; multiplicator = 1; EEPROM.write(2000, curChannel); EEPROM.commit(); if (pkts == 0) pkts = deauths; no_deauths = pkts - deauths; display.clear(); display.drawLine(minRow, Line, maxRow, Line); display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawString(Row1, LineText, "Ch:"); display.drawString(Row3, LineText, "Pkts:"); display.drawString(Row5, LineText, "DA:"); display.setTextAlignment(TEXT_ALIGN_RIGHT); display.drawString(Row2, LineText, (String)curChannel); display.drawString(Row4, LineText, (String)no_deauths); display.drawString(Row6, LineText, (String)deauths); for (int i = 0; i < maxRow; i++) display.drawLine(i, maxLine, i, maxLine - val[i]*multiplicator); display.display(); } if (curTime - prevTime >= 1000) { prevTime = curTime; for (int i = 0; i < maxRow; i++) { val[i] = val[i + 1]; } val[127] = pkts; getMultiplicator(); if (deauths > packetRate) digitalWrite(ledPin, LOW); else digitalWrite(ledPin, HIGH); if (pkts == 0) pkts = deauths; no_deauths = pkts - deauths; display.clear(); display.drawLine(minRow, Line, maxRow, Line); display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawString(Row1, LineText, "Ch:"); display.drawString(Row3, LineText, "Pkts:"); display.drawString(Row5, LineText, "DA:"); display.setTextAlignment(TEXT_ALIGN_RIGHT); display.drawString(Row2, LineText, (String)curChannel); display.drawString(Row4, LineText, (String)no_deauths); display.drawString(Row6, LineText, (String)deauths); for (int i = 0; i < maxRow; i++) display.drawLine(i, maxLine, i, maxLine - val[i]*multiplicator); display.display(); deauths = 0; pkts = 0; } }
جمع بندی
در این پروژه توانستیم مقادیر ترافیک شبکه در ۱۴ چنل استاندارد را بصورت جداگانه اندازهگیری کنیم. همچنین در صورت وقوع هرگونه حمله Deauth به کاربر اطلاع رسانی خواهد شد. تمام مقادیر بصورت گرافیکی در نمایشگر Oled نمایش داده خواهند. و با استفاده از میکروسوییچ امکان تغییر چنل را خواهیم داشت.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
نوشته ساخت دستگاه PacketMonitor با برد ESP8266 و نمایشگر Oled اولین بار در دیجی اسپارک پدیدار شد.