Seite 1 von 3

MTU (Maximum Transmission Unit) Tester

Verfasst: 13.04.2008 06:47
von ts-soft

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
Die Ereignisbehandlung für das Fensterlein wurde etwas vernachläßigt :mrgreen:
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

Verfasst: 13.04.2008 07:34
von Riacon
dsl 1000
weiß nicht
1500 bytes

Verfasst: 13.04.2008 07:46
von ts-soft
Riacon hat geschrieben:dsl 1000
weiß nicht
1500 bytes
Dann sollte ja alles optimal sein und Du brauchst nicht auf allen vieren durch
die Registry krauchen ums anzupassen :mrgreen:

dsl 1000 gibts ja kaum noch, ich tippe mal auf nen alten Vertrag mit T-Online

Danke erstmal für die Werte

Verfasst: 13.04.2008 09:33
von DarkDragon
DSL 6000
T-Online
MTU: 1500 (Sollte eigentlich 1454 sein)

Verfasst: 13.04.2008 09:54
von Deluxe0321
DSL 3000
Alice
MTU: 1480

Verfasst: 13.04.2008 10:14
von PMTheQuick
VDSL 4000
interGGA.ch
MTU: 1500

Verfasst: 13.04.2008 10:16
von legion
XDSL 16000
INODE.AT
MTU: 1492

Verfasst: 13.04.2008 11:10
von RAaBe
VDSL 25000
T-Online
MTU: 1492

MfG

RAaBe

Verfasst: 13.04.2008 11:29
von Lord
DSL 6000
Telekom
MTU: 1492

Verfasst: 13.04.2008 11:40
von RSBasic
Die maximale MTU beträgt: 1492
KD DSL 4000