Netzwerktraffic messen?

  • ja geil.
    DevilDevil, mit Deinem Lösungsansatz hab ichs schonmal hingekriegt.
    Super. Merci beaucoup.

    Noch schöner wär es jetzt natürlich mit dem Ansatz von Mega, weil man dann kein zusätzliches Programm braucht. :)

  • Also, mit dem DU Meter hab ich das Ding fertig zum Laufen gekriegt.
    Allerdings ist das ein bisschen blöd, weil der DUMeter ne 30 Tage-Testversion ist. Ich will das Ding nicht unbedingt kaufen :)

    Mega, könntest di dir, vielleicht nochmal anschauen, was ich bei deiner Lösung falsch gemacht hab...das müsste doch eigentlich so oder so ähnlich gehen, oder?

    Danke!

  • Hi... =)

    Mir hat der Ansatz von Mega sehr gut gefallen und da habe ich gedacht ich bastel mal etwas weiter...
    Habe nur leider jetzt ein Problem...
    Die Traffic des UP und DOWN bezieht sich ja jetzt auf den gesammten Traffic des Rechners... gibt es da ne möglichkeit das geziehlter auszulesen als mit netstat -e.... :comp2:

    Hier mal das Programm wie es bis jetzt ist.
    (für 2000er flat. kann aber umgestellt werden)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <Constants.au3>
    #include <array.au3>
    #include <string.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $begin1 = TimerInit();Startpunkt setzen der Zeitmessung(Um das erste mal zu Deklarieren)

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Administrator\Desktop\auto it\speedmeter\NetGUI.kxf
    $NetGUI = GUICreate("NetStats", 294, 133, 197, 119, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
    GUICtrlCreateLabel("Uploaded", 24, 8, 73, 20, $WS_GROUP)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $UpLoad = GUICtrlCreateLabel("Upload", 8, 32, 100, 20, BitOR($SS_CENTER,$SS_SUNKEN,$WS_GROUP))
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $verhaeltnis = GUICtrlCreateLabel("n/a", 118, 32, 48, 20, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN,$WS_GROUP))
    GUICtrlSetFont(-1, 6, 400, 0, "MS Sans Serif")
    GUICtrlCreateLabel("Downloaded", 184, 8, 91, 20, $WS_GROUP)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Download = GUICtrlCreateLabel("Download", 176, 32, 105, 20, BitOR($SS_CENTER,$SS_SUNKEN,$WS_GROUP))
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Up = GUICtrlCreateLabel("SpeedUp", 8, 80, 100, 20, BitOR($SS_CENTER,$SS_SUNKEN,$WS_GROUP))
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Down = GUICtrlCreateLabel("SpeedDown", 176, 80, 100, 20, BitOR($SS_CENTER,$SS_SUNKEN,$WS_GROUP))
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlCreateLabel("Speed", 32, 56, 49, 20, $WS_GROUP)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Label1 = GUICtrlCreateLabel("Verhältnis", 118, 16, 52, 15)
    GUICtrlSetFont(-1, 5, 400, 0, "MS Sans Serif")
    $Progress1 = GUICtrlCreateProgress(8, 112, 100, 9)
    $Progress2 = GUICtrlCreateProgress(176, 112, 100, 9)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUISetOnEvent(-3, "_exit")

    [/autoit] [autoit][/autoit] [autoit]

    $UpStr = 0
    $DownStr = 0
    $time = 0
    $UpStr_alt = 0
    $DownStr_alt = 0


    _netstat($UpStr, $DownStr); Up,Down das erste mal lesen um Verschiebungspunkte zu suchen
    $Xup = $UpStr ;Startpunkt setzen
    $Xdown = $DownStr

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1

    Sleep (500)

    _netstat($UpStr, $DownStr)


    $UpStr = $UpStr - $Xup ;Startpunkt verschieben
    $DownStr = $DownStr - $Xdown

    $Up_speed = $UpStr - $UpStr_alt
    $Down_speed = $DownStr - $DownStr_alt

    ;ToolTip ('Alt: '&$UpStr_alt&' - '&$UpStr&' = '&$UpStr-$UpStr_alt &@CRLF _
    ; &'Neu: '&$DownStr_alt&' - '&$DownStr&' = '&$DownStr-$DownStr_alt,5,5)

    $diff = TimerDiff($begin1)
    $begin1 = TimerInit()
    ;ConsoleWrite($diff&@CRLF)

    $Up_speed = $Up_speed/($diff/1000) ;Zeitversatz abziehen oder draufrechnen (WICHTIG!)
    $Down_speed = $Down_speed/($diff/1000)

    $Up_speed = Round(($Up_speed*8)/1024,2) ; *8 für Byte zu bit /1024 für in kbit
    $Down_speed = Round(($Down_speed*8)/1024,2)

    $Up_speed_pro = $Up_speed*0.5 ; 0,5 für 2k er flat 0.0625 für 16k er flat
    $Down_speed_pro = $Down_speed*0.05 ; 0,05 0.00625
    ;ToolTip ($Up_speed_pro&' | '&$Down_speed_pro)

    GUICtrlSetData ($Progress1,$Up_speed_pro) ;Prozessbalken setzen
    GUICtrlSetData ($Progress2,$Down_speed_pro)

    GUICtrlSetData ($Up,$Up_speed&' kbit') ;Upload Daten setzen
    GUICtrlSetData ($Down,$Down_speed&' kbit')


    If $UpStr < $DownStr Then ;Wenn Verhältnis $UpStr < $DownStr dann 1:xx
    $verhaeltnis_str = Round($DownStr/$UpStr,2)
    GUICtrlSetData ($verhaeltnis,'1 : '&$verhaeltnis_str)
    Else ;... ansonsten xx:1
    $verhaeltnis_str = Round($UpStr/$DownStr,2)
    GUICtrlSetData ($verhaeltnis,$verhaeltnis_str&' : 1')
    EndIf

    $UpStr_alt = $UpStr ;Alte Werte Speichern
    $DownStr_alt = $DownStr

    Select
    Case $DownStr < 1024
    $DownStr = $DownStr&' Byte'
    Case $DownStr > 1023 And $DownStr < 1048575
    $DownStr = Round($DownStr/1024,2)&' KB'
    Case $DownStr > 1048575
    $DownStr = $DownStr/1024
    $DownStr = Round($DownStr/1024,2)&' MB'
    EndSelect

    Select
    Case $UpStr < 1024
    $UpStr = $UpStr&' Byte'
    Case $UpStr > 1023 And $UpStr < 1048575
    $UpStr = Round($UpStr/1024,2)&' KB'
    Case $UpStr > 1048575
    $UpStr = $UpStr/1024
    $UpStr = Round($UpStr/1024,2)&' MB'
    EndSelect

    If $DownStr == 0 And $UpStr == 0 Then ;Wenn kein Netzwerk angeschlossen ist
    GUICtrlSetData($Download,'n/a')
    GUICtrlSetData($UpLoad, 'n/a')
    Else
    GUICtrlSetData($Download,$DownStr)
    GUICtrlSetData($UpLoad, $UpStr)
    EndIf

    WEnd

    Func _netstat(ByRef $UpStr, ByRef $DownStr)
    $NetStat = Run(@ComSpec & " /c netstat -e", @SystemDir, @SW_HIDE, 2)
    $LineDos = StdoutRead($NetStat, 400)

    If StringInStr($LineDos,'Bytes') = True Then
    $Line = _StringBetween ($LineDos,'Bytes','Unicastpakete')
    $Line = StringStripWS($Line[0], 7)
    $Lines = StringSplit($Line, " ")
    $UpStr = $Lines[2]
    $DownStr = $Lines[1]
    EndIf
    EndFunc ;==>_netstat

    ;Func _Reset(ByRef $TUp, ByRef $TDwn)
    ; _netstat($UpStr,$DownStr)
    ; $Tup = $UpStr
    ; $Tdwn = $DownStr
    ;EndFunc

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    MFG chris :D

  • Hey hey hey, das wird ja immer besser :)
    Tolle Programme!

    Leider hab ich es immer noch nicht hingekriegt, meinen ursprünglichen Plan zu verwirklichen, nämlich, dass ein bestimmtes Programm geschlossen wird, wenn die Up- oder Downloadrate für eine bestimmte Zeit unter einem besitmmten Wert geblieben ist...
    Kann mir da vielleicht nochmal jemand helfen?

    Wär toll!

  • kann es nich auch sein das deine 100000 bytes vllt kb oda auch mb sein können? weil ich habe nich gesehen das die einheit irgendwie festgelegt ist.

    sry wenn meine vermutung falsch sein sollte. ;)

  • achso...ich probiers einfach mal aus, da kleinere Zahlen einzugeben...
    Ansonsten müsste es aber richtig sein?

  • wobei, da steht ja

    [autoit]


    If $ende = "10000" And $TodayDown < "100000" Then ProcessClose("notepad.exe")

    [/autoit]

    also, wenn es KLEINER als 100000 was-auch-immer ist...
    und ob das nun KB oder MB sind, ist ja eigentlich egal...
    Bei wenig Netzwerktraffic dürfte ich da ja eigentlich immer drunter liegen...

    ?(