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, müssen sie neu kompiliert erden. Zunächst muss Cygwin geladen und installiert werden. Die Standard-Einstellungen sind in Ordnung. Wenn der Installer bei den Paketen angekommen ist, klicke auf „Devel“, damit aus „Default“ ein „Install“ wird. 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 in also c:\cygwin64\iperf-3.7\. 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 überlicherweise 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 nuun direkt aus der Cygwin Umgebug ausführen. Dazu ist jedochz 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 einen 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 belastbaren 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

if "%1"=="" goto Hilfe

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 [%2] EQU [-U] (
echo Test der WAN Verbindung gegen den Iperf-Server von %server% im UPLOAD
iperf3 -c %server% -p 5200 -f m -4
) else (
echo Test der WAN Verbindung gegen den Iperf-Server von %server% im DOWNLOAD
iperf3 -c %server% -p 5200 -f m -4 -R
)

goto Ende

:LAN
rem Gegenstelle ist eine IP im LAN
if /i [%2] EQU [-U] (
echo Test der LAN Verbindung gegen %1 im UPLOAD
iperf3 -c %1 -p 5201 -f m -4
) else (
echo Test der LAN Verbindung gegen %1 im DOWNLOAD
iperf3 -c %1 -p 5201 -f m -4 -R
)
goto Ende

:Hilfe
echo Aufruf mit: client.bat [WAN^|IP-Adresse] [-U]
echo Version vom 11.10.2019
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 Mit dem optionalen Parameter -U wird die Upload Geschwindigkeit gemessen.

:Ende

Die 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

Tags

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.

Related Articles

Schreibe einen Kommentar

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

Ich akzeptiere

Check Also

Close
Back to top button
Close
Close