Netzwerktraffic messen?

  • Hi zusammen.

    Gibt es eine Möglichkeit, mit Autoit den Traffic einer Netzwerkkarte zu messen?

    Ich würde gern ein Programm schreiben, dass permanent misst (in kbps), wie hoch die downloadrate einer bestimmten Netzwerkkarte ist (ich habe mehrere in meinem Rechner). Wenn diese Downloadrate nach einer von mir angegebenen Zeit einen von mir angegebenen Wert nicht überschritten hat, soll ein bestimmtes Programm geschlossen werden.

    Ist sowas mit AutoIt möglich?

    Danke schonmal für Eure Antworten :)

    Trashmaxx

  • ich würde sagen man kann es hinbekommen ich weiß jezt nicht wie du die downloadrate messen kannst aber das mit dem schließen eines programms nach bestimmt zeit kann ich dir erklären.

    also an den anfang des scriptes musst du die befehl timerinit() setzen.

    und dann irgendwo im mittelteil eine while schleife mit timerdiff() und if... in dem if wird dann an der angegebenen zeit gemessen ob die download rate einen bestimmten wert überschritten hat, wenn nicht dann wird ein programm geschlossen. ;)

    EDIT: hier mal ein kleines beispiel:

    [autoit]

    $start = timerinit()
    $rate = ;hier kommt denn der befehl zum messen der rate hin

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

    while 1
    $ende = TimerDiff($start)
    If $ende = "deine zeit" And $rate < "deine rate" Then ProcessClose("")
    sleep(200)
    WEnd

    [/autoit]

    2 Mal editiert, zuletzt von .::Mignon::. (14. November 2007 um 16:32)

  • Super.
    Das ist schonmal ein guter Anfang. Danke!
    Bin schon die ganze Zeit am Googlen und in der Hilfe suchen, ob man irgendwie die Netzwerkkarte ansprechen kann, oder so...aber ich find irgendwie nix :(

    Hat da jemand noch ne Idee? Wird doch bestimmt irgendwie gehen...?
    Danke, Leute!

  • du könntest ja mal in der englischen hilfe blättern da steht auch eine menge drin ;)

    EDIT: mit ich noch gerade eingefallen das beim internet explorer ja die downloadrate angezeigt wird. man könnte diese ja auch einfach auslesen und dann sollte es auch klappen versuchs doch mal;) (hab einfach mal angenommen das du internet explorer nutzt)

    Einmal editiert, zuletzt von .::Mignon::. (14. November 2007 um 16:43)

  • hmmm...an sich ne gute Idee...aber es geht halt nicht um Internetdownloads, sondern um TCP Traffic im internen Netzwerk...ist das das gleiche? Kann ich das auch mit dem IE irgendwie auslesen? Ich kenn mich da nicht so gut aus... :)

  • nee dann geht das denk ich mal nich. du kannst den IE auslesen aba nichts mit dme IE auslesen.
    aber versuchs immer weiter. ;)

  • Ok....kann ich denn mit AutoIt Daten aus jedem beliebigen Programm auslesen?
    Denn so Netzwerkmonitoring Tools, die den Traffic anzeigen, gibt es ja genug...

  • niemand ne idee?
    wär echt klasse, wenn ich das heute noch hinkriegen könnte...
    würde damit jemandem nen riesen gefallen tun! :)

  • Hey, danke für die Antoworten.
    Das netstat - e versteh ich irgendwie nicht...das ist ja keine laufende Anzeige, sondern ne Statistik über die gelaufenen Verbindungen, oder?

    Der Artikel über den Netzwerkmonitor war interessant, ich hab ihn aber im WinXP gar nicht gefunden :D

    Dafür bin ich dann aber beim Googeln auf den Netzwerkmonitor im Taskmanager gestoßen (Strg-Alt-Entf --> Task-Manager --> Netzwerk). Hatte ich ja ganz vergessen, dass es den gibt :)
    Die Anzeige ist eigentlich schon alles, was ich brauch.
    Wenn ich die mit AutoIt auslesen könnte, das wär echt stark.

    Kann mir jemand sagen, wie das geht?
    Ich hoffe, ich stell mich nicht allzu blöd an :)

    Liebe Grüße

    Trashmaxx

  • in die WHILE einfach netstat -e >> C:\Netstat.txt einbauen,
    diese datei auslesen und vergleichen

    fertig

  • Geile Sache.
    Das war ein guter Denkanstoß.
    Ich versuch das mal hinzufummeln :)
    Falls ich Probleme hab, meld ich mich nochmal.

    Merci!!!

    • Offizieller Beitrag

    Hi,

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <Constants.au3>
    Opt("GUIOnEventMode", 1)

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

    ; == GUI generated with Koda ==);
    $NetGUI = GUICreate("NetStats", 293, 190, 195, 148)
    GUICtrlCreateLabel("Uploaded", 8, 8, 73, 20, $WS_GROUP)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

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

    $UpLoad = GUICtrlCreateLabel("Upload", 8, 32, 100, 20, BitOR($SS_SUNKEN, $WS_GROUP))
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

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

    GUICtrlCreateLabel("Downloaded", 176, 8, 91, 20, $WS_GROUP)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

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

    $Download = GUICtrlCreateLabel("Download", 176, 32, 105, 20, BitOR($SS_SUNKEN, $WS_GROUP))
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

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

    $Up = GUICtrlCreateLabel("TodayUp", 8, 96, 100, 20, BitOR($SS_SUNKEN, $WS_GROUP))
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

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

    $Down = GUICtrlCreateLabel("TodayDown", 176, 96, 100, 20, BitOR($SS_SUNKEN, $WS_GROUP))
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

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

    GUICtrlCreateLabel("Today", 8, 72, 49, 20, $WS_GROUP)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

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

    $Reset = GUICtrlCreateButton("Reset", 104, 156, 73, 25)

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

    ;GUICtrlSetOnEvent ( $Reset, "_reset" )

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

    GUISetOnEvent(-3, "_exit")

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

    GUISetState(@SW_SHOW)

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

    $UpStr = 0
    $DownStr = 0
    $Tup = 0
    $Tdwn = 0

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

    _netstat($UpStr, $DownStr); Get inital values
    $Tup = $UpStr
    $Tdwn = $DownStr

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

    While 1
    _netstat($UpStr, $DownStr)
    GUICtrlSetData($Download, $DownStr)
    GUICtrlSetData($UpLoad, $UpStr)
    $TodayUp = $UpStr - $Tup
    $TodayDown = $DownStr - $Tdwn
    GUICtrlSetData($Up, $TodayUp)
    GUICtrlSetData($Down, $TodayDown)
    Sleep(1000)
    WEnd

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

    Func _netstat(ByRef $UpStr, ByRef $DownStr)
    $NetStat = Run(@ComSpec & " /c netstat -e", @SystemDir, @SW_HIDE, 2)
    $Line = StdoutRead($NetStat, 130)
    $Start = StringInStr($Line, "Bytes")
    $Line = StringMid($Line, $Start + 5)
    $Line = StringStripWS($Line, 7)
    $Lines = StringSplit($Line, " ")
    $UpStr = $Lines[2]
    $DownStr = $Lines[1]
    EndFunc ;==>_netstat

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

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

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    So long,

    Mega

  • Wow, DevilDevil und Mega, das ist ja wirklich ein super Service von Euch beiden!!!!
    1000 Dank!

    @DevilDevil: Dein Vorschlag gefällt mir ziemlich gut. Einzihger Nachteil: Die Meldung kommt nur einmal, danach nicht mehr. Aber das macht eigentlich nichts, weil danach das entsprechende Programm ja eh geschlossen würde.

    Jetzt müsste ich nur noch wissen, wie ich die Meldung abfange... :)


    @Mega: Der Wahnsinn, gleich ein kompletter Code :)
    aber dein Tool stellt mir nur laufend die Statistik da, ne?
    Ich bräuchte eigentlich ne laufende Anzeige der momentanen Downloadrate und wenn diese für eine definierte Zeit einen bestimmten Wert nicht überschritten hat, soll eine Aktion ausgeführt werden.
    Ich versuche mal, Dein Script dementsprechend umzumodeln. :)
    Für weitere Vorschläge bin ich allerdings sehr dankbar, weil ich = noob :)


    Vielen Dank nochmal!

  • Geht das Abfangen von solchen Messages irgendwie mit
    GUICtrlGetHandle? ODer bin ich da auf dem Holzweg?

  • eventuell mit

    [autoit]


    While 1
    if WinActive("DU Meter Anzeige") Then
    MsgBox(0,"","Gefunden")
    exit
    EndIf
    sleep(1000);wegen Systemalast
    WEnd

    [/autoit]

    statt dermsgbox deine aktion

    Einmal editiert, zuletzt von devildevil3 (15. November 2007 um 13:33)

  • @ Mega:

    Habe grad mal versucht, Deine Lösung auf mein Problem anzupassen...
    Müsste das nicht so oder so ähnlich aussehen (Codeausschnitt, nur die While-Schleife)

    [autoit]


    _netstat($UpStr, $DownStr); Get inital values
    $Tup = $UpStr
    $Tdwn = $DownStr
    $start = timerinit()

    While 1
    _netstat($UpStr, $DownStr)
    GUICtrlSetData($Download, $DownStr)
    GUICtrlSetData($UpLoad, $UpStr)
    $TodayUp = $UpStr - $Tup
    $TodayDown = $DownStr - $Tdwn
    GUICtrlSetData($Up, $TodayUp)
    GUICtrlSetData($Down, $TodayDown)
    $ende = TimerDiff($start)
    If $ende = "10000" And $TodayDown < "100000" Then ProcessClose("notepad.exe")
    Sleep(1000)
    WEnd

    [/autoit]


    ich hab jetzt einfach mal testweise versucht, abzufragen, ob nach 10 Sekunden weniger als 100000 Bytes runtergeladen wurden...
    Funzt aber irgendwie nicht...was hab ich flasch gemacht?