SoftwareTechnik

iPerf für Windows kompilieren

Wenn du diesen Beitrag angeklickt hast, weißt du, was iPerf ist und was man damit macht. Falls nicht, es ist ein Tool zur Messung von LAN/WLAN Performance, also Geschwindigkeit der Datenübertragung. Die Homepage mit Sourcecode verlinkt auch vorkompilierte Binaries, jedoch sind die für Windows ziemlich asbach. Ich suchte also nach einer Möglichkeit, aus aktuellem Sourcecode ein aktuelles Binary zu machen.

1.  Cygwin installieren

Cygwin ist eine Linux Umgebung für Windows. Bevor Linux Apps in dieser Umgebung laufen, muss man sie kompilieren. Zunächst muss Cygwin geladen und installiert werden. Die Standard-Einstellungen sind in Ordnung. Wenn der Installer bei den Paketen angekommen ist, klicke auf das DropDown-Symbol neben „Devel“ und ändere „Default“ in „Install“. Damit werden alle Entwicklungs-Komponenten installiert, die nötig sind. Das dauert nun eine ganze Weile. Am Ende gibt es ein Icon auf dem Desktop, mit dem die Cygwin Umgebung gestartet wird.

2.  Download iPerf Source Code

Als nächstes folgt der Download des aktuellen iPerf Sourcodes. Zum Zeitpunkt der Erstellung dieses Beitrages war das v3.7. Die Datei iperf-3.7.tar.gz enthält ein Tar mit einem Verzeichnis, welches wir nach nach c:\cygwin64\iperf-3.7\ entpacken. Zum Entpacken von tar und gzip Dateien ist z.B. 7-zip wunderbar geeignet.

3. Compiler konfigurieren

Starten der Cygwin Umgebung aus dem Start Menu oder über das Icon auf dem Desktop.

In das Verzeichnis wechseln, in dem die iPerf Sourcen liegen:

cd /iperf-3.7

Den Compiler konfigurieren (das dauert evtl. ein paar Minuten):

./configure

Wenn alles gut läuft und das sollte es, sieht es am Ende etwa so aus:

4.  Kompilieren

Um den Sourcecode zu übersetzen, einfach make tippen und Enter drücken. Leider gibt es an dieser Stelle zwei Fehler. Keine Ahnung warum, aber ich habe eine Lösung. 

In der Datei c:\cygwin64\usr\include\openssl\ossl_typ.h müssen die Zeilen 66 und 73 auskommentiert werden. Schreib einfach // (2x den Schrägstrich auf der 7) an den Anfang:

//# ifdef _WIN32
# undef X509_NAME
# undef X509_EXTENSIONS
# undef PKCS7_ISSUER_AND_SERIAL
# undef PKCS7_SIGNER_INFO
# undef OCSP_REQUEST
# undef OCSP_RESPONSE
//# endif

Das bewirkt, dass die Compiler Anweisungen ohne Wenn und Aber ausgeführt werden. Das „ifdef _WIN32“ funktioniert bei mir nicht.

Dann noch mal make und Enter.

5.  Installieren

Vorausgesetzt das Kompilieren läuft nun durch, werden Programme unter Linux üblicherweise mit make install installiert. Dadurch wird iperf.exe in dem Verzeichnis c:\cygwin64\usr\local\bin\ installiert.

6. iPerf ausführen

Natürlich kann man iPerf nun direkt aus der Cygwin Umgebung starten. Dazu ist jedoch der komplette Pfad anzugeben, also z.B. /usr/local/bin/iperf.  Allerdings denke ich, dass du iPerf einfach aus der Windows Kommandozeile oder auf einem anderen Rechner ausführen möchtest. Dazu müssen alle notwendigen DLLs aus der Cygwin Umgebung kopiert werden.

Wenn Cygwin mit den Standardeinstellungen installiert wurde, befindet sich iperf.exe in c:\cygwin64\usr\local\bin\

Die 3 notwendigen DLLs befinden sich hier c:\cygwin64\bin\.

  • cygcrypto-1.1.dll
  • cygwin1.dll
  • cygz.dll

Kopiere diese 3 DLLs und iperf.exe zusammen in ein beliebiges Verzeichnis, um es überall direkt unter Windows auszuführen. 

7. iPerf anwenden

Ich habe für die Messungen zwei kleine Batchdateien geschrieben, eine für den Server und eine für den Client. Idealerweise läuft der Server auf einem mit maximaler Geschwindigkeit direkt am Router angebunden Rechner, damit hier kein Nadelöhr entsteht. Natürlich kann man iPerf-Server auch auf einem iPad starten und das neben den WLAN AccessPoint legen. Ein Air 3 verbindet sich immerhin mit knapp 900 MBit/s an einem Ubiquiti AP Pro. Doch reduziert ein WLAN angebundenes Gerät ja wieder den maximalen WLAN Durchsatz, den wir ja messen möchten und deshalb sind nur eingeschränkt belastbare Messergebnisse zu erzielen.

Zur Messung der tatsächlichen Internet-Geschwindigkeit eignet sich ein externer iPerf Server. Diese gibt es reichlich (Google hilft bei der Suche), für meinen Wohnort benutze ich den von WilhelmTel. Ich habe in der Batchdatei eine Auswahl aus 4 Internet Servern eingebaut. Außerdem kann man mit dem Parameter „-U“ die Messung der Upload-Geschwindigkeit durchführen.

client.bat

@echo off
setlocal EnableDelayedExpansion
chcp 1252 > nul

rem http://software.es.net/iperf/

if "%1"=="" goto Hilfe

set modus=DOWNLOAD
set port=5201

if /i [%1] EQU [WAN] (
set port=5200
)
if /i [%1] NEQ [WAN] (
set server=%1
)

if /i [%2] NEQ [] (
if /i [%2] EQU [-U] (
set modus=UPLOAD
)
if /i [%2] NEQ [-U] (
set port=%2
if /i [%3] EQU [-U] (
set modus=UPLOAD
)
)
)

rem echo Modus: %modus% Server: %server% Port: %port%
rem goto ENDE


rem Gegenstelle ist ein Internet Server
if /i not "%1"=="WAN" goto LAN
echo .
echo 1. speedtest.wtnet.de Wilheml.Tel in Wilhelmshaven (D)
echo 2. iperf.worldstream.nl Worldstream in Amsterdam (NL)
echo 3. ping.online.net Online.net in Paris (F)
echo 4. iperf.scottlinux.com Hurricane in Freemont (USA)
echo A. Abbrechen
echo H. Hilfe
echo .
@CHOICE /C:"1234AH" /T:10 /D:1 /M "Bitte wählen Sie einen Test Server im Internet aus"
if errorlevel 6 goto Hilfe
if errorlevel 5 goto Ende
if errorlevel 4 goto USA
if errorlevel 3 goto Paris
if errorlevel 2 goto Amsterdam
if errorlevel 1 goto Wilhelmshaven

goto ENDE

:Wilhelmshaven
set server="speedtest.wtnet.de"
goto Test

:Amsterdam
set server="iperf.worldstream.nl"
goto Test

:Paris
set server="ping.online.net"
goto Test

:USA
set server="iperf.scottlinux.com"
goto Test

:Test
title Internet-Gegenstelle ist %server%
if /i [%modus%] EQU [UPLOAD] (
echo Test der WAN Verbindung gegen den Iperf-Server von %server% auf Port %port% im %modus%
iperf3 -c %server% -p %port% -f m -4 -t 60 -i 10 -b 100M
) else (
echo Test der WAN Verbindung gegen den Iperf-Server von %server% auf Port %port% im %modus%
iperf3 -c %server% -p %port% -f m -4 -R -t 60 -i 10 -b 100M
)

goto Ende


:LAN
rem Gegenstelle ist eine IP im LAN
if /i [%modus%] EQU [UPLOAD] (
echo Test der LAN Verbindung gegen %1 auf Port %port% im %modus%
iperf3 -c %server% -p %port% -f m -4 -t 60 -i 10 -b 1000M
) else (
echo Test der LAN Verbindung gegen %1 auf Port %port% im %modus%
iperf3 -c %server% -p %port% -f m -4 -R -t 60 -i 10 -b 1000M
)
goto Ende




:Hilfe
echo Aufruf mit: client.bat [WAN^|IP-Adresse] [Port] [-U]
echo Version vom 14.04.2020
echo Testet die Geschwindigkeit zu einem iperf3 Server.
echo Geben Sie als 1. Parameter entweder WAN oder eine IP-Adresse eines Servers im LAN an.
echo Mit WAN wird ein Server im Internet (Auswahl) als Gegenstelle benutzt.
echo Geben Sie als optionalen 2. Parameter einen Port an. Standard ist 5201 (LAN) oder 5200 (WAN).
echo Mit dem optionalen Parameter -U wird die Upload Geschwindigkeit gemessen.
echo Beispiel: client.bat 192.168.1.10 4711 testet gegen einen iperf3-Server auf Port 4711.

:Ende

Die folgende Batchdatei server.bat startet einen iperf3 Server auf dem PC, auf dem sie aufgerufen wird.

server.bat

@echo off
cls

for /f "tokens=2 delims=[]" %%a in ('ping -n 1 -4 %COMPUTERNAME% ^| find /I "%COMPUTERNAME%"') do set ip=%%a
title IP-Adresse: %ip% Port: 5201
echo Die Adresse dieses iperf3 Servers ist %ip% auf Port 5201
echo (Beenden mit Strg+C)

iperf3 -s -p 5201 -f m -V --logfile stats.txt

 

 

8. iPerf auf der FritzBox

Moment mal, auf der FritzBox läuft doch auch einen iPerf Server! Warum nehmen wir nicht den? Ja, kann man machen. Den iPerf-Server auf der FritzBox startet man unter Inhalt – Fritz!Box-Support – Durchsatzmessungen. Den Link „Inhalt“ findet man links ganz unten auf der Startseite unter dem Menü. Der Server ist jedoch ein alter iPerf Server Version 2. Damit ist er nicht kompatibel mit iPerf3! Einen iPerf2 Client kannst du hier downloaden und eine passende Batchdatei habe ich auch dafür.

client2.bat

@echo off
setlocal EnableDelayedExpansion
chcp 1252 > nul

if "%1"=="" goto Hilfe
if /i [%1] NEQ [] (
set server=%1
)

iperf2.exe -c %server% -p 4712 -u -t 60 -i 10 -b 1000M

goto Ende

:Hilfe
echo Aufruf mit: client2.bat [IP-Adresse der FritzBox]
echo Version vom 10.01.2021
echo Testet die Geschwindigkeit über UDP zum iperf2 Server der FritzBox auf Port 4712.
echo Aktiviere den integrierten iperf2 Server über die FritzBox Administrationsseite unter
echo Inhalt - FRITZ!Box Support

:Ende

Oliver Stephan

Ich bin Oliver, geboren 1968, verheiratet und habe mehrere Kinder. Mein persönliches Interesse für Computertechnik habe ich nach einem Informatikstudium zu meinem Beruf gemacht. Heute arbeite ich als Datenbankspezialist und übernehme die Pflege einiger Wordpress Sites.

Ähnliche Artikel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Überprüfen Sie auch
Schließen
Schaltfläche "Zurück zum Anfang"