Code: Alles auswählen
; Dieses kleine Progamm ermittelt die maximale MTU
;
; Leider ist die MTU bei vielen Systemen zu hoch, was dazu führt, das einige Webseiten nicht, oder nur
; schlecht erreicht werden. Unter Windows wird, insofern kein Wert hierfür in die Registry eingetragen
; wurde, eine MTU von 1500 vorgegeben. Dieser Wert ist für DSL meist zu hoch. Typischer Wert wären hier
; 1492 Bytes.
;
; Manche Tools wie z.B. cFosSpeed, sowie auch einige Router, passen diesen Wert, entweder autom. oder
; durch festgelegte Einstellungen des Providers an. Dies ist leider nicht in allen Fällen so, deshalb hab
; ich diesen kleinen TestCode geschrieben, der die maximale ("optimale?") MTU ermittelt.
;
; Als Grundlage diente mir dieser Artikel:
; http://www.gschwarz.de/mtu-wert.htm#mtu-wert_ermitteln
; Dort findet man auch Infos, wo man den Wert in der Registry anpassen kann, bzw. welche Tools es hierfür
; gibt.
;
; Weitere Infos zur MTU auch auf Wikepedia:
; http://de.wikipedia.org/wiki/Maximum_Transmission_Unit
;
; Dieser Code funktioniert nur auf deutschen Systemen. Für die Richtigkeit der ermittelten Werte übernehme
; ich keinerlei Haftung!
;
; Autor: Thomas Schulz aka ts-soft
; Erstellt am: 13.04.2008
; PureBasic 4.xx
; Windows only (sollte mit kleinen Änderungen auch unter Linux laufen)
EnableExplicit
Procedure.l IsMTU2High(MTU.l, URL$ = "www.purebasic.fr")
Protected tmpMTU = MTU - 28 ; Internetprotokoll beansprucht 28 Bytes
Protected tmpURL$ = "-f -l " + Str(tmpMTU) + " " + URL$
Protected Output.s = "", result.l = 0
Protected Ping = RunProgram("ping", tmpURL$, "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If Ping
While ProgramRunning(Ping)
If IsWindow(0)
While WindowEvent() : Delay(0) : Wend
EndIf
Output + ReadProgramString(Ping) + #CR$
Wend
CloseProgram(Ping)
OemToChar_(Output, Output)
Output = PeekS(@Output, #PB_Any, #PB_Ascii)
ProcedureReturn FindString(Output, "sste fragmentiert werden", 1)
EndIf
ProcedureReturn -1 ; error
EndProcedure
Define.l result, testMTU = 1500; 1500 ist der default Wert (WinXP), wenn nichts in der Registry steht
If OpenWindow(0, 0, 0, 240, 40, "MTU-Test - Bitte etwas Geduld!", #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
TextGadget(0, 10, 10, 220, 20, "", #PB_Text_Center | #PB_Text_Border)
Repeat
result = IsMTU2High(testMTU)
Select result
Case 0, -1
CloseWindow(0)
Break
Default
SetGadgetText(0, "Test mit " + Str(testMTU) + " Bytes fehlgeschlagen")
While WindowEvent() : Delay(0) : Wend
testMTU - 2
EndSelect
ForEver
EndIf
If result = 0
MessageRequester("MTU-Test", "Die maximale MTU beträgt: " + Str(testMTU))
Else
MessageRequester("MTU-Test", "Ein Fehler ist aufgetreten")
EndIf

Wäre schön, wenn der eine oder andere sein Ergebnis, + Art des Internet-
Zugangs, sowie Provider posten würde.
Ich fang mal an

DSL 16000, Freenet, MTU: 1454 Bytes
Gruß
Thomas
// edit:
funktioniert jetzt auch im Unicode-Modus