Wifi Ağları Hakkında Wemos D1 Mini ile Nasıl Bilgi Toplanılır?

Berkay Vagas
6 min readMay 29, 2023

--

Merhabalar, bu yazımda Wemos D1 Mini NodeMcu ESP8266 kartı ile nasıl Wifi ağları hakkında pasif bilgi toplayıp bu bilgileri nasıl SD kart içerisine kaydedebileceğimizden bahsedeceğim.

Wemos D1 Mini

İlk olarak Wemos D1 Mini nedir?

Wemos D1 Mini, popüler bir IoT (nesnelerin interneti) geliştirme kartıdır. Wemos markası altında üretilen bu kart, ESP8266 Wi-Fi mikroçipi üzerine kurulmuştur. ESP8266, Wi-Fi bağlantısı sağlayabilen bir mikrodenetleyicidir ve Arduino programlama dilini destekler.

Wemos D1 Mini kartı, birçok dijital ve analog giriş/çıkış piniyle birlikte gelir. Bu pinler sayesinde sensörleri, röleleri, LCD ekranları ve diğer bileşenleri kontrol etmek için kullanabilirsiniz. Ayrıca, USB üzerinden programlanabilir ve güç alabilirsiniz.

Wemos D1 Mini, Arduino IDE veya MicroPython gibi geliştirme ortamlarında programlanabilir. Kartın üzerindeki Wi-Fi özellikleri, IoT projeleri için kullanışlıdır. Örneğin, sensör verilerini bir sunucuya göndermek, uzaktan cihazları kontrol etmek veya web tabanlı bir arayüz oluşturmak gibi işlevleri gerçekleştirebilirsiniz. Aynı zamanda siber güvenlikçiler ve hackerlar için test veya saldırı amacıyla programlanabilir kartlardır.

Arduino IDE programı nedir ve içerisinde yapılması gereken adımlar nelerdir?

Arduino IDE

Arduino IDE (Integrated Development Environment), Arduino platformu için geliştirilen resmi yazılım geliştirme ortamıdır. Arduino IDE, Arduino kartlarını programlamak ve kontrol etmek için kullanılan bir araçtır.

Arduino IDE, basit bir metin düzenleyici ile birlikte Arduino’nun C/C++ tabanlı programlama dilini kullanmanızı sağlar. Arduino kartınıza yüklemek istediğiniz programları yazabilir, derleyebilir ve yükleyebilirsiniz. Arduino IDE ayrıca Arduino’nun kütüphanelerini kullanmanızı ve örnek kodları incelemenizi sağlar.

Wemos D1 Mini mikrodenetleyicisini Arduino IDE 1.8.19 ile programladım ve projeye başlamadan Wemos D1 Mini kartını programlayabilmemiz için gerekli olan işlemleri sırasıyla yapalım:

1. Arduino IDE içerisinde ESP8266 kartını programlayabilmek için ilk olarak github’ta bulunan bir kütüphaneyi kurmamız gerekiyor. https://github.com/esp8266/Arduino adresine girdiğimizde “Installing with Boards Manager” kısmında bulunan https://arduino.esp8266.com/stable/package_esp8266com_index.jsonURL’i kopyalamamız gerekiyor.

https://github.com/esp8266/Arduino

2. Daha sonra File — Preferences — Additional Boards Manager URLs alanına bu linki yapıştırmamız gerekiyor. Yapıştırma işleminden sonra “Ok” butonu ile bu aşamayı tamamlıyoruz.

File — Preferences

3. Tools — Board — Board Managers seçeneğine tıklıyoruz ve arama yerine “ESP8266” yazarak “ESP8266 by ESP8266 Community” dosyalarını kurmak için “Install” butonuna tıklıyoruz.

Tool-Board-Boards Managers

Bu aşamalardan sonra Wemos D1 Mini kartımızı kodlamak için gerekli olan dosyaların kurulumlarını bitirmiş oluyoruz.

Şimdi Wifi ağlarının bilgilerini toplamak ve SD karta kaydetmek için gerekli olan malzemelerimizin listesini oluşturalım ve bu malzemelerin kurulumlarını gerçekleştirelim:

Malzemeler:

1. Wemos D1 Mini
2. Wemos D1 Mini ile uyumlu SD Kart modülü
3. SD Kart — Ben 16 GB SD kart tercih ettim
4. 8 Pin Dişi Header -11 mm — 4 Adet
5. Micro SD Kart Okuyucu
6. Mini Breadboard
7. Type C Kablo

Malzemeler

Kurulum aşamaları:

1. Wemos D1 Mini kartını ve Wemos D1 Mini ile uyumlu SD Kart modülünü satın aldığımızda pinleri lehimsiz gelebilir. O yüzden ilk olarak 11 mm 8 pin dişi headerlarımızı kartımıza ve sd kart modülüne lehimlememiz gerekiyor.
2. Lehim işleminden sonra mini breadboarduna altta sd kart modülü ve üstte Wemos D1 Mini olacak şekilde ve Wemos D1 Mini ile SD kart modülünün pinleri eşit olarak gelecek şekilde birleştiriyoruz ve SD kartı modüle yerleştiriyoruz.

Donanımımızın Son Hali

Son olarak Arduino IDE içerisine aşağıda oluşturduğum kodu kopyalayıp yapıştırabilirsiniz. Kodu yapıştırdıktan sonra “Verify” ile kontrol edip “Upload” ile yükleyebilirsiniz.

Kod:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <SD.h>

#define FILE_PREFIX "data"
#define FILE_EXTENSION ".txt"

const int chipSelect = D8;
int fileCounter = 1;

void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);

// SD kartı başlat
if (!SD.begin(chipSelect)) {
Serial.println("SD kart başlatılamadı!");
return;
}

// Kayıt dosyalarının numarasını kontrol et
fileCounter = checkFileCounter();
}

void loop() {
Serial.println("WiFi Ağlarını Tarıyor...");

int numNetworks = WiFi.scanNetworks();
if (numNetworks == 0) {
Serial.println("Yakınlarda WiFi ağı bulunamadı.");
} else {
Serial.println("___________________________________________________________________________________________________");
Serial.printf("| %-5s | %-32s | %-17s | %-4s | %-6s | %-14s |\n", "Sıra", "ESSID", "BSSID", "PWR", "ENC", "Şifre Durumu");
Serial.println("|______|________________________________|___________________|_____|________|________________|");

// Verileri kaydedecek dosya adı
String fileName = FILE_PREFIX + String(fileCounter) + FILE_EXTENSION;

// Dosyayı aç
File dataFile = SD.open(fileName, FILE_WRITE);
if (dataFile) {
for (int i = 0; i < numNetworks; i++) {
String encType;
switch (WiFi.encryptionType(i)) {
case ENC_TYPE_WEP:
encType = "WEP";
break;
case ENC_TYPE_TKIP:
encType = "WPA";
break;
case ENC_TYPE_CCMP:
encType = "WPA2";
break;
case ENC_TYPE_NONE:
encType = "None";
break;
case ENC_TYPE_AUTO:
encType = "Auto";
break;
default:
encType = "Bilinmiyor";
break;
}

String passwordStatus = WiFi.encryptionType(i) == ENC_TYPE_NONE ? "Şifresiz" : "Şifreli";

Serial.printf("| %-5d | %-32s | %-17s | %-4d | %-6s | %-14s |\n", i + 1, WiFi.SSID(i).c_str(), WiFi.BSSIDstr(i).c_str(),
WiFi.RSSI(i), encType.c_str(), passwordStatus.c_str());
dataFile.printf("%d,%s,%s,%d,%s,%s\n", i + 1, WiFi.SSID(i).c_str(), WiFi.BSSIDstr(i).c_str(),
WiFi.RSSI(i), encType.c_str(), passwordStatus.c_str());

delay(10);
}

dataFile.close();
Serial.println("___________________________________________________________________________________________________");
Serial.println("Veriler " + fileName + " dosyasına kaydedildi.");
} else {
Serial.println("Dosya açılamadı.");
}
}

// Dosya numarasını bir artır
fileCounter++;

delay(60000);
}

int checkFileCounter() {
int counter = 1;
while (true) {
String fileName = FILE_PREFIX + String(counter) + FILE_EXTENSION;
if (!SD.exists(fileName)) {
return counter;
}
counter++;
}
}

Bu kod, ESP8266 tabanlı bir cihazın Wi-Fi ağlarını tarayarak bulunan ağların bilgilerini SD karta kaydeden bir işlemi gerçekleştirir. İşlevleri aşağıdaki gibi açıklayabilirim:

1. İlk olarak, gerekli kütüphaneler (ESP8266WiFi.h, WiFiClient.h ve SD.h) dahil edilir.
2. FILE_PREFIX ve FILE_EXTENSION değişkenleri, kaydedilecek dosyaların adının ön eki ve uzantısını belirtir.
3. chipSelect değişkeni, SD kartın bağlı olduğu pin numarasını belirtir.
4. fileCounter değişkeni, kaydedilecek dosyaların numarasını tutar ve başlangıç değeri 1 olarak atanır.
5. setup() fonksiyonunda, seri haberleşme başlatılır, Wi-Fi bağlantısı kesilir ve SD kart başlatılır.
6. loop() fonksiyonunda, Wi-Fi ağlarını tarar ve bulunan ağların bilgilerini seri monitöre ve SD karta kaydeder.
7. WiFi.scanNetworks() fonksiyonuyla yakındaki Wi-Fi ağlarının sayısı alınır. Eğer hiç ağ bulunamazsa ilgili mesaj seri monitöre yazdırılır. Ağlar bulunursa, bilgileri sırayla seri monitöre yazdırır ve SD karta kaydeder.
8. Kaydedilecek dosya adı fileName değişkenine atanır ve dosya açılır.
9. for döngüsü ile her ağın bilgileri Serial.printf() ile seri monitöre ve dataFile.printf() ile SD karta yazdırılır.
10. İşlem tamamlandığında dosya kapatılır ve ilgili mesajlar seri monitöre yazdırılır.
11. checkFileCounter() fonksiyonu, mevcut dosya sayısını kontrol eder ve bir sonraki kullanılabilir dosya numarasını döndürür.

Bu kod, ESP8266 tabanlı bir cihazın Wi-Fi ağlarını her 1 dakikalık döngülerde tarayarak bulunan ağların bilgilerini kaydeder ve sonrasında analiz veya takip amaçlı olarak kullanılmasını sağlar. Cihazın elektriği kesilse bile tekrar başladığında SD kart içerisine TXT formatında kaldığı yerden dosyaları kaydetmeye devam eder.

SD karta kaydettiği ve anlık olarak Seri Monitörden görebileceğimiz bilgiler ise:

1. Wifi ağının ismi — ESSID
2. Wifi ağının MAC adresi — BSSID
3. Wemos D1 Mini’ye olan uzaklığı — PWR
4. Wifi ağının kullanmış olduğu şifreleme yöntemi — ENC
5. Wifi ağına bağlanmak için bir şifrenin gerekip gerekmediği bilgisi

Anlık olarak her 1 dakikalık döngüden gelen sonuçları “Seri Monitör”de izleyebilirsiniz.

Seri Monitör

Micro SD kart okuyucusu ile kaydedilen verileri daha sonra inceleyebilirsiniz.

Micro SD Kart Okuyucu ile Verilere Ulaşabilirsiniz

Bu proje ile pasif anlamda Wifi ağları hakkında nasıl bilgi toplanacağı konusunu göstermek istedim. Bu ve bunun gibi mikrodenetleyici kartlar ile çok daha gelişmiş saldırılar yapılabilmektedir ve bu proje ile bu konuya dikkat çekmek istedim. Örneğin “Evil Twin”, “Deauthentication” vb saldırılar bu kartlar aracılığı ile yapılabilmektedir.

--

--