IsDestinationReachable mit irrealen Werten

    • Offizieller Beitrag

    Hallo,
    ich wollte mit IsDestinationReachable die Verbindungsgeschwindigkeiten (In/Out) zu Url's ermitteln, aber da die Funktion aberwitzige Werte ausgibt, gehe ich davon aus, dass dieser Part der Funktion fehlschlägt. Die Überprüfung auf Erreichbarkeit dagegen funktioniert.
    Ist das bei Euch ebenso?

    [autoit]

    If IsDestinationReachable('www.autoit.de') Then ; AutoIt erreichbar?
    MsgBox(0, '', 'Erreichbar')
    Else
    MsgBox(0, '', 'Nicht Erreichbar')
    EndIf

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

    $aRet = IsDestinationReachable('www.autoit.de', 1)
    If IsArray($aRet) Then MsgBox(0, 'Erreichbar mit Speed:', _
    'InSpeed: ' & $aRet[0] & ' Kb/s' & @CRLF & _
    'OutSpeed: ' & $aRet[1] & ' Kb/s' & @CRLF)

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

    #cs - bei mir für alle Adressen:
    InSpeed: 52734.4 Kb/s
    OutSpeed: 52734.4 Kb/s
    #ce

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

    Func IsDestinationReachable($sDestination, $fSpeed=0) ; destination can be an IP address, a UNC name, or an URL
    Local $tQOCINFO = DllStructCreate('long dwSize;long dwFlags;long dwInSpeed;long dwOutSpeed') ; dwIn/OutSpeed in bytes/second
    DllStructSetData($tQOCINFO, 'dwSize', DllStructGetSize($tQOCINFO))
    Local $ret = DllCall("SENSAPI.DLL", "long", "IsDestinationReachableA", _
    "str", $sDestination, _
    "ptr", DllStructGetPtr($tQOCINFO))
    Select
    Case @error
    Return SetError(@error,0,0)
    Case $ret[0] = 0 ; Destination nicht erreichbar
    Return 0
    Case Else ; Destination erreichbar
    If $fSpeed Then
    Local $aOut[2] = [Round(DllStructGetData($tQOCINFO, 'dwInSpeed')/1024, 1), _
    Round(DllStructGetData($tQOCINFO, 'dwOutSpeed')/1024, 1)]
    Return $aOut ; speed in Kb/s
    Else
    Return 1
    EndIf
    EndSelect
    EndFunc

    [/autoit]
  • Hi,

    bei mir ebenfalls In & Out gleicher Speed (mit 2 Adressen getestet).

    In 976562,5
    Out dto.

    ;-((
    Stefan

    P.S:If IsArray($ret) Then
    sollte wohl
    If IsArray($aRet) Then
    sein?!?

  • Bei mir ebenfalls In&Out bei jedem Test gleich.

    Mehrere Adressen : immer 97656.3 kb/s.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    • Offizieller Beitrag

    P.S:If IsArray($ret) Then
    sollte wohl
    If IsArray($aRet) Then
    sein?!?

    Ähh,.. ja klar. :) Hatte es geändert, aber nicht überall.

    Da ihr auch so bekloppte Werte erhaltet, kann man wohl davon ausgehen, dass die Funktion nicht tut, was sie soll. Auch wenn man aus der Struktur das dwFlag abfragt kommt seltsamerweise '0' raus. Das ist auch völlig daneben. Hier sollte für LAN = 1 oder für WAN = 2 rauskommen.
    Na gut, dann kann man das wohl nicht verwerten - schade.

    • Offizieller Beitrag

    Laut Funktionsbeschreibung wird die maximale Datenrate für Incoming (Download) und Outgoing (Upload) zum angegebenen Host ermittelt. Der Wert wird in b/s angegeben, deshalb noch meine Umrechnung auf Kb/s.
    Ich brauch es nicht zwingend, da ich aber über die Funktion gestolpert bin, dachte ich, dass es ganz praktisch wär.

  • Zitat

    Die Funktion zeigt bei mir nämlich genau die WLAN-Übertragungsraten an


    Yo, hab kein Wlan, aber anhand der hier geposteten Werte und meiner Tests wird die Geschwindigkeit des Netzwerkadapters ausgegeben, bei Funkey ca 50Mbit, bei mir 100 und 10 Mbit (auf und von div Rechnern gegenseitig) und Ojo sollte wohl an einer Gigabitleitung hängen^^

  • Windows rechnet da anscheinend mit 1000 und nicht mit 1024 b/kb. Wenn man mit 1000 rechnet kommen die identischen Werte heraus, die der Tooltip des Netzwerk-Symboles anzeigt.

    Außerdem bekomme ich für das dwFlag 1 für LAN heraus. Bugfix: Hängst du vllt nur an einem USB-Modem?

  • Moin,

    meine Config, nur zur Info:

    Virtuelle Maschine mit virtuellem GigaBit Netzwerk Adapter
    Physikalischer Netzwerk Adapter hängt an 100 MBit Switch
    Internet ist eine 2 MBit Standleitung

    Es scheinen also nicht reale Up- und Download Raten in Richtung Host ermittelt zu werden!
    Ich habe mit https://autoit.de/WWW.AUTOIT.COM und https://autoit.de/WWW.GOOGLE.DE getestet.
    Es wird die Datenrate des virtuellen Netzwerkadapters (s. Posting Andy) ausgegeben, aber nicht die tatsächlichen in Richtung Host.

    ;-))
    Stefan

    • Offizieller Beitrag

    funkey: Ich hab die gleichen Werte wie du, entspricht auch meinem WLAN-Durchsatz.
    Also ist nun klar:
    - Erreichbarkeit wird auf die übergebene Adresse getestet
    - Datendurchsatz bezieht sich ausschließlich auf den Netzwerkadapter

    Dabei war die Funktionsbeschreibung eindeutig anders:

    Zitat

    Determines if the specified destination can be reached and provides Quality of Connection (QOC) information for the destination.

    Danke fürs Testen.

  • Demnach haben wir jetzt eine nützliche Funktion ;) :rock:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "Adapter-Geschwindigkeit", _GetAdapterSpeed())

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

    Func _GetAdapterSpeed()
    Local $tQOCINFO = DllStructCreate('dword;dword;dword;dword')
    DllStructSetData($tQOCINFO, 1, DllStructGetSize($tQOCINFO))
    Local $ret = DllCall("SENSAPI.DLL", "long", "IsDestinationReachableA", _
    "str", @IPAddress1, "ptr", DllStructGetPtr($tQOCINFO))
    Return StringFormat("%.1f MBit/s", DllStructGetData($tQOCINFO, 3)/1000000)
    EndFunc

    [/autoit]