Im aktuellen Fall sollten alle Netzwerkkarten auf eine bestimmte MTU gesetzt werden, da die Standard MTU-Einstellungen vom Windows 10 bei der gerforderten Anwendung nicht funktionierten. Grundsätzlich sollte dies aber auch unter anderen Windows-Versionen funktionieren.
Das Setzen der MTU funktioniert auf der Konsole recht einfach.
Zuerst listet man alle Netzwerkkarten auf
1 |
Netsh interface ipv4 show interfaces |
Nun kann man den MTU-Wert durch Angabe der ID (Idx)
1 |
netsh interface ipv4 set subinterface "11" mtu=1458 store=persistent |
oder der Bezeichnung (NAme)
1 |
netsh interface ipv4 set subinterface "Local Area Connection" mtu=1458 store=persistent |
setzen.
Problematischer wird es, wenn man auf allen Netzwerkkarten die MTU anpassen möchte, denn es gibt hier keinen „all“-Parameter (zumindest nicht meines Wissens).
Ich muss demnach alle vorhandenen Netzwerkkarten erkennen und möchte diese dann per netsh-Befehl anpassen. Ich entscheide mich für die Verwendung der Namen der Netzwerkadapter.
Der Abruf selber erfolgt in einer simplen Schleife:
1 |
For /f " tokens=*" %a in ('Netsh Interface IPV4 Show interfaces') do @echo %a |
Da ich die Überschrift und die Trennzeile nicht benötige, erweitere ich den Befehl mit „skip=3“
1 |
For /f "skip=3 tokens=*" %a in ('Netsh Interface IPV4 Show interfaces') do @echo %a |
Besser
Um die Namen zu erhalten trickse ich jetzt ein bisschen. Ich möchte alle Inhalte ab der 4. Spalte und den Rest als Gesamt-String.
Ich ändere also den Befehl auf tokens=4* und rufe nun nicht die erste (4.) Spalte auf, sondern den Inhalt dahinter – mit %b
1 |
For /f " skip=3 tokens=4*" %a in ('Netsh Interface IPV4 Show interfaces') do @echo %b |
Jetzt sollte noch das Loopback-Interface unbeachtet bleiben. Dazu nutze ich findstr.
1 |
For /f "skip=3 tokens=4*" %a in ('Netsh Interface IPV4 Show interfaces ^| findstr /v "Loop"') do @echo %b |
Jetzt kommt der eigentliche Befehl. Anstelle des echo-Befehls kommt nun die netsh-Anweisung
1 |
For /f "skip=3 tokens=4*" %a in ('Netsh Interface IPV4 Show interfaces ^| findstr /v "Loop"') do (netsh interface ipv4 set subinterface "%b" mtu=1302 store=persistent) |
Jetzt wurden alle Netzwerkadapter (ausgenommen das Loopback) auf die angegebene MTU eingestellt.
Wer das Ganze in einer Batch-Datei nutzen möchte, muss lediglich beachten, dass die Variablen mit zwei Prozentzeichen angegeben werden müssen.
Dafür kann man aber die MTU dann auch schön als Variable angeben.
Als Beispiel
1 2 3 4 |
@Echo Off set "mtu=1200" For /f "skip=3 tokens=4*" %%a In (‘NetSh Interface IPv4 Show Interfaces ^| findstr /v "Loop"’) Do (netsh interface ipv4 set subinterface "%%b" mtu=%mtu% store=persistent) Exit /B |
Diese Batch-Datei kann nun auch von einem User ausgeführt werden, ohne dass er sich in einer Konsolenschlacht wiederfindet.
Sollte die Anwendung sein, dass ein User dies selber einsetzen kann (um z.B.: flexibel die MTU anpassen zu können), kann man es auch noch etwas schöner verpacken:
z.B.: in eine GUI zu diesem Befehl …. mit AutoIT (im nächsten Artikel)