شاید تابحال این مورد نظر شما را جلب کرده باشد، شبکه وای فایی که از آن استفاده میکنید چه مقدار ترافیک را ثبت میکند. یا زمانی که از آن استفادهای ندارید آیا ترافیکی در شبکه شما در حال ردوبدل است؟ و یا این ترافیک دارای چه اطلاعاتی هستند، جواب این نیازها همگی با یک دستگاه جالب و کاربردی به اسم 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 متصل است قادر خواهیم بود شماره چنل در حال آنالیز را تغییر دهیم.
وسایل مورد نیاز
کتابخانه مورد نیاز
در این آموزش از کتابخانه ssd1306 استفاده خواهیم کرد، مراحل زیر را برای نصب کتابخانه دنبال کنید.
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه 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 نمایش داده خواهند. و با استفاده از میکروسوییچ امکان تغییر چنل را خواهیم داشت.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام مهندس اموزش جالبی بود
فقط یک سوال میشه با استفاده از ماژول esp8266 و ماژول صفحه نمایش دستگاهی درست کرد که با هاش بتوان کسانی که بدون اجازه یا با اجازه ما به وایفای ما وصل میشوند را حذف کرد یعنی دسترسی وایفای را از این اشخاص قطع کنیم ؟؟
با سلام، بله این امکان وجود دارد که باید STA ها اسکن شوند و با استفاده از deauth attack دسترسی آن ها قطع شود.
سلام
من نمیتونم کتابخانه ESP8266WiFi رو روی نرافزار اردینو نصب کنم باید چه کار کنم؟
و اینکه نمی تونم برد وموس رو بهش معرفی کنم قبلا با اردینو uno کار میکردم حالا رو uno مونده باید چه کار کنم؟
این مطلب رو هم مطالعه کردم و انجام دادم
https://digispark.ir/%D9%86%D8%B5%D8%A8-%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B1%D8%AF-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-iot-wemos-d1-mini/
با سلام، باید از قست tools باید برد مدنظر را نصب کنید، همچنین با استفاده از همین قسمت قبل از آپلود هر کد باید از قسمت boards، برد مدنظر را انتخاب کنید.
سلام مهندس
میشه با ماژول NRF یا برد esp8266 کارت شبکه درست کرد ؟؟
سلام، با برد های NRF حیر ولی با تراشه های ESP8266 چنین موردی را دیده بودم، اما متاسفانه تست نکردم.
سلام مهندس میشه این پروژه را بزارید چون خیلی کاربردی هست
حتما در اولین فرصت، آموزشی با این عنوان منتشر میکنم.
سلام مهندس
میشه با استفاده از esp8266 و نمایشگرoled یه دستگاهی درست کرد که مثلاً من خودم رمز عبور وایفایم را به شخصی گفته ام اما من نمیدونم که این طرف چقدر از ترافیک خریداری شده توسط من را مصرف میکند
و یا حتی خودم هم چقدر از این ترافیک را مصرف میکنم
که مثلاً برای این دستگاه دو منو تعریف کنیم منوی اول کاربر متصل به وایفای و کاربر دوم هم خودم که وقتی وارد منو دوم شدم بهم نشون بده که من امروز چقدر از ترافیک خریداری شده را مصرف کردم
این امکان هست اما نیازمند API اختصاصی از طرف شرکت مبدا هست برای دریافت اطلاعات، البته ممکن است راه های دیگری باشد که من اطلاع ندارم.
سلام علت این ارور چی میتونه باشه؟ extended character is not valid in an identifier
با سلام
در چه مرحلهای چنین اروری دریافت میکنید؟
سلام استاد
میتونم با استفاده از این ماژول و oled یک جمر وای فای بسازم.
سوالم اینه که میتونم ماژول رو با سخت افزاری که روی خودش هست کنترل کنم ، یعنی با صفحه نمایشگر و چند کلید که به پین های ماژول کانکت شده. لطفاً راهنمایی کنید.
ممنون
با سلام
به صورت تئوریک میتوانید چنین دستگاهی بسازید ولی اطلاعات کاملتری از آن در دسترس نداریم.