Introduction: Sistem De Cartografiere a Rețelelor WiFi
Cartografierea retelelor WiFi este procedeul prin care se doreste gasirea retelelor WiFi, iar apoi localizarea acestora cu ajutorul GPS-ului. In urma cartografierii se pot obtine informatii despre retelele WiFi existente cum ar fi: numarul acestora, coordonatele aproximative, numele lor sau tipul de securitate.
Functionare pe scurt: cand se gaseste o retea WiFi, se stocheaza locatia si detaliile retelei, iar rezultatele vor fi afisate pe o harta.
Step 1: Raspberry Pi 3 B+
Primul pas a fost achizitionarea unui Raspberry Pi 3 B+.
Specificatii (sursa) :
- SoC: Broadcom BCM2837B0 quad-core A53 (ARMv8) 64-bit @ 1.4GHz
- GPU: Broadcom Videocore-IV
- RAM: 1GB LPDDR2 SDRAM
- Networking: Gigabit Ethernet (via USB channel), 2.4GHz and 5GHz 802.11b/g/n/ac Wi-Fi
- Bluetooth: Bluetooth 4.2, Bluetooth Low Energy (BLE)
- Storage: Micro-SD
- GPIO: 40-pin GPIO header, populated
- Ports: HDMI, 3.5mm analogue audio-video jack, 4x USB 2.0, Ethernet, Camera Serial Interface (CSI), Display Serial Interface (DSI)
- Dimensions: 82mm x 56mm x 19.5mm, 50g
Step 2: Alfa Network AWUS036NHA
Urmatorul pas a fost achizitionarea unui adaptor WiFi. Chiar daca aceasta versiune de Pi vine cu WiFi, am dorit ceva cu antena externa pentru o localizare mai precisa. Dupa o documentare pe internet am ajuns la concluzia ca cea mai buna solutie este un adaptor de la Alfa Network. Am ales un Alfa Network AWUS036NHA.
Acesta are urmatoarele caracteristici (sursa):
- Compatible with IEEE 802.11n, 802.11b/g/n wireless standards
- 2.4GHz frequency band, MIMO (Multiple Input Multiple Output)
- Complies with Universal Serial Bus Rev. 2.0 specifications
- High speed transfer TX data rate up to 150 Mbps
- Supports WPS by S/W
- Supports wireless data encryption with 64/128-bit WEP, WPA, WPA2, TKIP, AES
- Wide Range coverage
- Compliant with FCC Part 15.247 for US, ETS 300 328 for Europe
- Supports driver for Windows 2000, XP 32/64, Windows7, Vista 32/64, Linux (2.4.x/2.6.x), Mac (10.4.x/10.5.x) Power PC & PC
Specificatii (sursa):
- Wireless: IEEE 802.11b/g/n
- USB 2.0 standard
- Detachable 5dBi RP-SMA Antenna
- Ralink 3070 chipset
Step 3: GPS Neo-6M
De asemenea, am achizitionat un GPS pentru a furniza date despre locatie. Am ales GPS Neo-6M.
Caracteristici (sursa):
- A complete GPS module with an active antenna integrated, and a built-in EEPROM to save configuration parameter data
- Built-in 25 x 25 x 4mm ceramic active antenna provides strong satellite search capability
- Equipped with power and signal indicator lights and data backup battery.4) Power supply: 3-5V; Default baud rate: 9600bps
- Interface: RS232 TTL
Step 4: Alte Elemente
Pe langa cele mentionate mai sus am mai avut nevoie de:
- Cablu LAN - pentru conectarea placuteri Raspberry Pi 3 B+ la laptop;
- USB network adapter - pentru conectarea cablului la laptop (in cazul meu, pentru ca nu dispun de port LAN);
- Baterie externa pentru a alimenta placuta;
- Fire mama-mama;
16 x 2 LCD;
CardSD 16GB;
Potentiometru;
Step 5: Conectivitate
- Raspberry Pi 3 B+ -- Laptop
Se conecteaza cu ajutorul cablului LAN si a adaptorului USB network.
- Raspberry Pi 3 B+ -- Alfa Network AWUS036NHA
Cablul USB al adaptorului WiFi se introduce intr-un port USB al placutei.
- Raspberry Pi 3 B+ ---> GPS Neo-6M
VCC (3.3V) ---> VCC
RXD ---> TXD
TXD ---> RXD
GND ---> GND
Se folosesc fire mama-mama.
- LCD ---> Raspberry Pi 3 B+
1. Pin 1 (Ground) ---> ground rail.
2. Pin 2 (VCC/5v) ---> positive rail.
3. Pin 3 (V0) ---> middle wire of the potentiometer.
4. Pin 4 (RS) ---> GPIO25 (Pin 22)
5. Pin 5 (RW) ---> ground rail.
6. Pin 6 (EN) ---> GPIO24 (Pin 18)
7. Pin 11 (D4) ---> GPIO23 (Pin 16)
8. Pin 12 (D5) ---> GPIO17 (Pin 11)
9. Pin 13 (D6) ---> GPIO18 (Pin 12)
10. Pin 14 (D7) ---> GPIO22 (Pin 15)
11. Pin 15 (LED +) ---> positive rail.
12. Pin 16 (LED -) ---> ground rail.
Step 6: Setup
Avand toate elementele hardware, am trecut la configurare. Primul pas a fost instalarea sistemului de operare pe Raspberry Pi. In cazul meu sistemul era deja instalat pe cardul microSD, singura modificare a fost activarea SSH-ului.
Urmatorul pas a fost configurarea laptopului pentru a trimite retea catre Raspberry Pi.
In Control Panel\Network and Internet\Network Connections am modificat proprietatile WiFi-ului la care eram conectat, bifand Allow other network users to connect through this computer's internet connection si selectand Ethernet2.
Dupa aceasta setare, in acelasi folder am verificat proprietatile Ethernet2 - Internet Protocol Version 4(TCP/IPv4) pentru a vedea ce IP foloseste Ethernet2. Astfel, am observat ca Raspberry Pi-ul va avea mereu un ip intre 192.168.137.1-254. Cu ajutorul programului Advance IP Scanner, cautand in acest domeniu, am reusit sa ma conectez la placuta prin Putty.
*Raspberry Pi-ul nu are setat un IP static, acesta se schimba la fiecare conecare a firului.
*La fel de usor, prin Putty m-am conectat apoi utilizand numele placutei afisat la prima rulare al Advance IP Scanner.
Step 7: GPSD
Dupa conectare, am actualizat sistemul, deoarece acesta putea fi in urma cu actualizarile. Am folosit:
sudo apt-get update
Cu sistemul actualizat, am instalat programele de care mai aveam nevoie. Am rulat:
sudo apt-get install -y screen gpsd libncurses5-dev libpcap-dev tcpdump libnl-dev gpsd-clients python-gps
Aceasta comanda instaleaza GPSD, pe care l-am modificat configurat apoi. Ruland
sudo nano /etc/default/gpsd
am modificat setarile astfel:
START_DAEMON="true"
GPSD_OPTIONS="-n"
DEVICES="/dev/ttyS0" <-- singura modificare pe care am facut-o
USBAUTO="true"
GPSD_SOCKET="/var/run/gpsd.sock"
*Se poate modifica /dev/ttyS0cu calea catre locul de unde ia gps-ul datele
Step 8: Kismet
Urmatorul pas a fos de a descarca Kismet.
wget http://www.kismetwireless.net/code/kismet-2016-07-R1.tar.xz
Kismet este un detector de WiFi, Bluetooth, etc.
Acestia sunt urmatorii pasi pe care i-am facut:
tar -xvf kismet-2016-07-R1.tar.xz
cd kismet-2016-07-R1/
./configure
make dep
make
sudo make install
Pentru a nu fi intrebat de fiecare data ce WiFi sa fie folosit, am decis sa editez fisierul de configurare al Kimset.
ifconfig
De obicei daca se exista un WiFi extern, acesta este pe wlan1
sudo nano /usr/local/etc/kismet.conf
Am adaugat:
ncsource=wlan1
De asemenea, am observat ca in output-ul vor fi fisiere care nu sunt utile pentru acest proiect asaca am moficiat logtypes in felul urmator:
logtypes=gpsxml,netxml
Step 9: LCD
Pentru afisarea pe LCD am folosit libraria AdaFruit.
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
cd ./Adafruit_Python_CharLCD
sudo python setup.py install
Pentru afisarea coordonatelor pe LCD am folosit acest script in python.
*Din motive de portabilitate am ales eliminarea LCD-ului.
Step 10: Testare GPS
Urmatorul pas a fost testarea GPS-ului.
Am creat o copie a cmdline.txt.
sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt
Am editat cmdline.txt si am eliminat interfata seriala, stergand console=ttyAMA0,115200.
sudo nano /boot/cmdline.txt
sudo reboot
Dupa reboot, am verificat baud rate-ul de la ttyS0:
sudo stty -F /dev/ttyS0 -a
Am setat baud rate-ul manual la 9600
sudo stty -F /dev/ttyS0 9600
Am testat printr-un simplu cat:
sudo cat /dev/ttyS0
Se primeau date incontinuu, deci gps-ul receptiona si baud rate-ul era corect setat.
Am dat start la GPSD:
sudo gpsd /dev/ttyS0 -F /var/run/gpsd.sock
Datele primite se pot afisa usor prin
cgps -s
sau
gpsmon
*Alte comenzi folositoare au fost:
sudo service gpsd restart
sudo service gpsd start
sudo service gpsd stop
sudo killall gpsd
Step 11: Proba Dispozitiv
Primul lucru pe care l-am facut a fost sa creez un director de teste:
mkdir ~/test
cd ~/test
Am deschis GPSD (in caz ca este inchis) si Kismet:
sudo stty -F /dev/ttyS0 9600
sudo cat /dev/ttyS0
sudo gpsd /dev/ttyS0 -F /var/run/gpsd.sock
screen -S kismet
sudo kismet
Dupa ce s-a deschis am apasat YES si START.
In aceste momente Kismet ruleaza si achizitioneaza date. In centru se pot oberva informatiile GPS, iar in dreapta se observa numarul de retele gasite. Am creeat un nou screen pentru Kimset, pentru a-i putea da timp sa achizitioneze date (CTRL + A / D).
Pentru a reconecta screen-ul:
screen -r kismet
Kismet inca ruleaza. In acest mod, putem porni Kismet si apoi deconectam placuta de la laptop. Cat timp Raspberry Pi-ul va fi alimentat, Kismet va rula. Astfel, se vor cartografia toate retelele receptionate in cazul deplasarii de la un punct la altul.
Step 12: Rezultate
Dupa inchiderea Kismet, toate datele au fost scrise in directorul curent (numit test). Se pote verifica existenta celor 2 fisiere XML pe care Kismet le-a creat prin comanda:
ls
Se afiseaza:
Kismet-20190409-17-43-54-1.gpsxml
Kismet-20190409-17-43-54-1.netxml
Cautand pe internet, am gasit un script care pregateste datele, salvadu-le intr-un fisier hartaWiFi.kml care poate fi importat in Google Maps (de exemplu).
wget https://gist.githubusercontent.com/ScottHelme/5c6869e17c3e9c8b2034dc8fc13e180b/raw/31c2d34f66748b6bd26415fd7d120c06b3d92eaf/netxml2kml.py -O netxml2kml.py
Am rulat scriptul:
python netxml2kml.py --kml -o hartaWiFi *xml
Acum, fisierul hartaWiFi.kml este creat si gata a fi incarcat pe Google Maps sau alt mediu in care se pot plota fisiere kml.
Step 13: Export Rezultate 1
Primul lucru pe care l-am facut a fost sa copiez de pe Raspberry Pi fisierul hartiWiFi.kml, folosind WinSCP, local, pe laptop.
Am creat o noua harta in Google Maps (link) si am importat fisierul hartiWiFi.kml.
Rezultatul se poate vedea in poze. In urma cartografierii si incarcarii fisierului in Google Maps, vor aparea informatii despre localizare, nume, tipul retelei, dar nu numai.
Step 14: Export Rezultate 2
O alta metoda de a afisa datele a fost sa creez pe laptop un fisier .html unde am importat harta cu acest cod.
Am incarcat fisierul .kml pe drive iar apoi am generat un link, utilizand Direct Link Generator. Link-ul generat l-am incarcat in cod la url:
var kmlLayer = new google.maps.KmlLayer({
url: '--------------',
suppressInfoWindows: true,
map: map });
Rezultatele se pot vedea in poza.