Skip to content
On this page

Versuch WiFi AP Mode, tshark, arp

WiFi Access Point mit WPA 2

Im vorhergehenden Versuch, haben Sie sich mit dem Verbinden zu einem WiFi AP vom Target her befasst. Es ist allerdings beim Raspberry Pi auch möglich das WiFi selber als Access Point zu betreiben. Während es üblich ist einen AP mit WPA2 zu schützen errichten wir zuerst eine unverschlüsselte (offene) Netzwerkinfrastruktur.

Zusätzliche Pakete installieren

Verbinden Sie sich mit dem Internet, entweder zuhause via WiFi, via AP auf dem Mobiltelefon oder im Klassenraum mit dem Netz dnet wie im Versuch: Wifi Managed oder alternativ via raspi-config. Falls Sie alternativ Zuhause sind: Verwenden Sie Ihr Smartphone um einen Hotspotaufzusetzen und verbinden Sie sich mit diesem.

Probleme mit raspi-config

Falls Raspi-Config nicht mit wpa_supplicant kommunizieren kann, stellen Sie sicher, dass eine config vorhanden ist

bash
cd /etc/wpa_supplicant
sudo cp wpa_supplicant.conf wpa_supplicant-wlan0.conf
sudo systemctl restart wpa_supplicant@wlan0.service

# status anschauen
sudo systemctl status wpa_supplicant@wlan0.service

# wlan Einstellungen bearbeiten via 
sudo raspi-config

Installieren Sie folgende Pakete zusätzlich:

bash
sudo apt install iperf3 hostapd

iperf3

Mit iperf3 können Sie die Datenrate via TCP und UDP feststellen und so "Bottlenecks" im Netzwerk finden. Installieren Sie iperf3 auch für Ihr Hostsystem https://iperf.fr/iperf-download.php

Auf Windows, öffnen Sie den Ordner in der Command Line (cmd) in dem Sie iperf3.exe entpackt haben und führen dieses via

bash
./iperf3.exe

in einer BASH Shell oder via

bash
iperf3.exe

in einer Windows Shell aus.

Ethernet throughput testen

Auf dem target starten Sie iperf3 als server:

bash
iperf3 -s

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

Auf dem Host als client (Wichtig: In der git bash müssen Sie iperf ein ./ voranstellen, damit es ausgeführt werden kann).

Wechseln Sie mit cd ins Verzeichnis des entpackten iperf3.exe. Folgende Commands sind in einer git bash (in einem Command Prompt .exe dem iperf3 Command anhängen).

bash
# Dieser PFAD ist abhängig davon, wo iperf entpackt wurde
cd Downloads/<PFAD_ZU_IPERF_DOWNLOAD_DIR>

./iperf3 -c 192.168.50.1

Connecting to host 192.168.50.1, port 5201
[  4] local 192.168.50.2 port 57778 connected to 192.168.50.1 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  25.2 MBytes   211 Mbits/sec    0    150 KBytes       
[  4]   1.00-2.00   sec  24.4 MBytes   204 Mbits/sec    0    150 KBytes       
[  4]   2.00-3.00   sec  24.4 MBytes   204 Mbits/sec    0    150 KBytes       
[  4]   3.00-4.00   sec  24.3 MBytes   204 Mbits/sec    0    150 KBytes       
[  4]   4.00-5.00   sec  24.4 MBytes   204 Mbits/sec    0    150 KBytes       
[  4]   5.00-6.00   sec  24.2 MBytes   203 Mbits/sec    0    150 KBytes  

Aufgabe

Messen Sie Ihren maximalen Throughput. Vergleichen Sie Ihre Resultate mit dieser Quelle https://www.raspberrypi.org/magpi/raspberry-pi-4-specs-benchmarks/.

Open Access Point (keine Authentifizierung)

Für das erstellen eines AP verwenden wir hostapd auf dem Target. Hierfür legen wir eine config im Homeverzeichnis an.

Im Samba Share, öffnen Sie ein File in Visual Studio Code (... oder Ihrem favorisierten Editor) accesspoint-open.conf.

SSID

Die SSID bezeichnet Ihren Access Point, falls Sie den Versuch im Lab durchführen verwenden Sie von Vorteil einen einzigartigen Namen.

interface=wlan0
driver=nl80211
ssid=dnet-open
hw_mode=g
channel=7
wmm_enabled=0
auth_algs=1

Probleme mit Config file (Driver not found)

Falls Sie das File unter Windows editieren, stellen Sie sicher, dass Zeilenumbrüche als \n oder LF (Linefeed) erstellt werden (Option bei Notepad++ / VS Code).

-VS Code Ändern Sie in der unteren Statusbar "Line Ending" von CRLF nach LF.

Im Zweifelsfall verwenden Sie am besten nano.

Starten Sie auf dem Target den hostapd.

bash
sudo hostapd accesspoint-open.conf
Configuration file: accesspoint-open.conf
Failed to create interface mon.wlan0: -95 (Operation not supported)
wlan0: Could not connect to kernel driver
Using interface wlan0 with hwaddr b8:27:eb:d3:02:2c and ssid "dnet-open"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED

An dieser Stelle ist Ihr Terminal wieder besetzt. Sie können den Access-Point hierzu wieder beenden mit CTRL-C oder alternativ in den Hintergrund befördern mittels CTRL-Z und anschliessendem bg.

Alternativ können Sie den hostapd service im Hintergrund starten (mit einem Anfügen von & am Ende der Zeile).

bash
# überprüfen Sie den status von wlan0
iwconfig wlan0

wlan0     IEEE 802.11  ESSID:"dnet"  
          Mode:Managed  Frequency:2.412 GHz  Access Point: 7C:FF:4D:6F:EC:E3   
          Bit Rate=65 Mb/s   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=65/70  Signal level=-45 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

# wpa_supplicant ausschalten
# da wir jetzt in den AP - Modus wechseln möchten

sudo systemctl stop wpa_supplicant@wlan0.service

# überprüfen wie der status ist

iwconfig wlan0

wlan0     IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

# sicherstellen, dass kein weiterer hostapd gestartet ist
sudo killall hostapd
sudo hostapd -B accesspoint-open.conf
sudo systemctl restart dnsmasq

Aufgabe

  • Wie beenden Sie den im Hintergrund gestarteten hostapd?
  • Konfigurieren Sie für das Interface wlan0 die IP 192.168.60.1/24.
  • Konfigurieren Sie die statische IPv4 Adresse 192.168.60.2/24 auf dem wlan Interface Ihres Hosts.
  • Messen Sie nun mit iperf3 den Datendurchsatz über WiFi. Falls es Probleme mit der Verbindung gibt, tauschen Sie die server / client von iperf3 aus.
  • Vergleichen Sie Ihre Resultate mit dieser Quelle https://www.raspberrypi.org/magpi/raspberry-pi-4-specs-benchmarks/.

WiFi 802.11n

Erstellen Sie eine zweite Konfiguration accesspoint-open-n.conf mit folgendem Inhalt und starten Sie hostapd:

bash
interface=wlan0
driver=nl80211
ssid=dnet-open
hw_mode=a
channel=36
wmm_enabled=1
auth_algs=1


ieee80211n=1
ieee80211ac=1
ht_capab=[HT40+]

WiFi 802.11ac

Noch schnellere Geschwindigkeiten können mit dem ac Standard erzielt werden:

bash
interface=wlan0
driver=nl80211
ssid=dnet-open
hw_mode=a
channel=36
wmm_enabled=1
auth_algs=1


ieee80211n=1
ieee80211ac=1
ht_capab=[MAX-AMSDU-3839][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]

require_vht=1
ieee80211d=0
ieee80211h=0
vht_capab=[MAX-AMSDU-3839][SHORT-GI-80]
#vht_oper_chwidth=1
#vht_oper_centr_freq_seg0_idx=42

WPA 2 Verschlüsselung

Offene WLAN Netze sind ungesichert, erstellen Sie eine WPA2 Konfiguration:

bash
interface=wlan0
driver=nl80211
ssid=dnet-secure
hw_mode=a
channel=36
wmm_enabled=1
auth_algs=1


ieee80211n=1
ieee80211ac=1
ht_capab=[MAX-AMSDU-3839][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]

require_vht=1
ieee80211d=0
ieee80211h=0
vht_capab=[MAX-AMSDU-3839][SHORT-GI-80]
#vht_oper_chwidth=1
#vht_oper_centr_freq_seg0_idx=42


wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=<Passwort hier>

Schreiben Sie obige config wie gehabt in ein File ap-secure.conf und starten Sie hostapd.

DHCP, IP Adressen dynamisch vergeben

Bis anhin haben Sie IP Adressen statisch einem Netzwerkinterface hinzugefügt. Das wird vor allem dann kompliziert, wenn Sie mehrere Hosts im Netz haben, welche sich regelmässig an- und abmelden. Richtigerweise müssten Sie jedem Host eine einmalige Adresse hinzufügen, dies hat zwei entscheidende Nachteile:

  • Hosts welche nicht verbunden sind besetzten eine IP-Adresse (das Netz hat so weniger Adressierungskapazität)
  • Bevor ein Host sich verbinden kann, muss eine Adresse von Hand zugewiesen werden.

DHCP ist ein Service (auf Layer 7, Applikation), welcher IP-Adressen dynamisch verteilt.

DHCP hat stellt für Clients folgende Dienstleistungen zur Verfügung:

  • IP Adresse und Subnetz werden konfiguriert
  • Default Gateway wird konfiguriert
  • DNS werden konfiguriert

Auf Linux finden Sie hierzu zwei verschiedene Komponenten.

  • DHCP Client (dhcpcd)
  • DHCP Server (dnsmasq)

DHCP Server Config

Installieren Sie dnsmasq:

bash
sudo apt install dnsmasq

Erstellen Sie das File /etc/dnsmasq.conf:

bash
interface=wlan0      # Use the require wireless interface - usually wlan0
  dhcp-range=192.168.40.17,192.168.40.157,255.255.255.0,24h

dnsmasq ist der service, welcher beides DNS und DHCP zur Verfügung stellt.

Starten Sie Ihren Access Point mit hostapd (am besten mit der -B option) und führen Sie folgenden Command aus um den DHCP Server einzuschalten:

bash
# dnsmasq service starten
sudo systemctl start dnsmasq

# passende IP für wlan0
sudo ifconfig wlan0 192.168.40.1/24 

Verbinden Sie nun Ihr Host System oder Smartphone mit dem Access Point und stellen Sie sicher, dass die IP-Adress nicht mehr statisch gesetzt, sondern dynamisch bezogen wird.

Verbinden via WiFi über 802.1X

Um Pakete nachzuinstallieren, verbinden Sie sich via 802.1X mit dem WLAN eduroam.

Beispielconfig für den WPA-Supplicant:

bash
network={
	ssid="eduroam"
	key_mgmt=WPA-EAP
	eap=PEAP
	identity="fhnw-emailadresse"
	password="fhnw-passwort"
	phase1="peaplabel=0"
	phase2="auth=MSCHAPV2"
}

dhcp ausschalten

Bevor Sie sich mit wpa_supplicant verbinden, stellen Sie sicher, dass dnsmasq ausgeschaltet ist, um keine DHCP leases auszugeben.

bash
sudo systemctl stop dnsmasq

Verbinden Sie sich wie in den vorhergehenden Veruschen mittels wpa_supplicant.

tshark

Im Standardsetup der Versuche verwenden Sie eth0 vom Target als direkte Brücke zum Host, üblicherweise mit der Adresse 192.168.50.1 und beim Host 192.168.50.2.

Mit Wireshark auf dem Host, ist es so also unmöglich Packets und Frames auf eth1 und wlan0 des Targets zu sniffen. Jedoch wären genau diese Interfaces sehr interessant zu beobachten.

Zu Hilfe kommt ein Terminal basiertes Tool tshark (Wireshark auf dem Terminal). Allerdings verlieren wir so einige Features, welches der "volle" Wireshark via GUI zur verfügung stellt.

In diesem Versuch verwenden wir beide tools Wireshark und tshark um Auf dem Host interfaces des Targets beobachten zu können.

Wireshark auch im Terminal. Das Programm tshark erlaubt es Ihnen auf dem Target Packete und Frames abzufangen und anzuzeigen.

Verbinden Sie sich via SSH zum target (unter Windwos mit Putty).

Installieren Sie tshark auf dem target:

bash
sudo apt install tshark

Führen Sie tshark aus:

bash
sudo tshark

Es wäre natürlich wünschenswert, die Ausgabe von tshark an unseren Host weiterzugeben und im vollumfänglichen GUI anzuzeigen. Hierzu können wir die Ausgabe von tshark binär anzeigen und weiterleiten.

bash
sudo tshark -w - 

Brechen Sie den Command mit CTRL + C ab.

Die Ausgabe kann so wireshark "gefüttert" werden.

Git / SSH installieren (Windows)

Auf Ihrerm Windows Host, installieren Sie (falls nicht bereits vorhanden) GIT https://git-scm.com/downloads und stellen sicher, dass Sie auch die bash Shell mitinstallieren (diese erlaubt es Ihnen den binären stream von tshark Wireshark zu übergeben).

Wireshark über SSH

In den vorherigen Versuchen haben Sie bereits Wireshark kennengelernt. Gerade das filtern und folgen von Streams auf Ebene Transport und Application wird durch das GUI erleichtert.

Starten Sie eine "Git Bash" und verbinden Sie sich mit dem SSH command mit dem target über Ethernet.

bash
ssh pi@192.168.50.1

Falls das klappt, loggen Sie sich wieder aus der interaktiven Shell aus mit CTRL + D.

Starten Sie direkt tshark:

bash
ssh pi@192.168.50.1 -t "sudo tshark"

tshark gibt nun direkt die ausgabe auf dem terminal aus. Allerdings werden Sie jetzt sehr viel Traffic auf Port 22 sehen.

Aufgabe

Warum sehen Sie traffic auf Port 22?

Beenden Sie den task mit CTRL + C.

Filtern Sie nun Port 22 mit tashrk raus.

thsark filter

Wie könne Sie Port 22 rausfiltern? Schauen Sie sich die man page von tshark an.

Wireshark mit tshark füttern (Shark feeds Shark).

Fürhen Sie folgenden Command aus um tshark caputres im Binärformat auf der BASH auszugeben:

bash
ssh pi@192.168.50.1 "sudo tshark -w -"

Brechen Sie den command ab. Jetzt starten und füttern Sie wireshark mit dem Pipe command |:

bash
ssh pi@192.168.50.1 "sudo tshark -w -" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

Aufgabe

Filtern Sie in tshark zuerst SSH raus und hören Sie auf alle interfaces.

Traffic verfolgen

Im folgenden Teil verfolgen Sie traffic bestimmter Protokolle:

DHCP

Suchen Sie nach DHCP traffic. Tipp, welches Protokoll braucht DHCP? Welche anderen Parameter? Können Sie DHCP Packets selber auf eth1 erzeugen? (Auf eth0 wäre das problematisch ... warum?)

ARP

Wie könne Sie einen ARP request forcieren? Filtern Sie nach "ARP" in Wireshark.

ICMP

Forcieren Sie ein ICMP Packet. Wie können Sie ein solches erzeugen?