Prüfen, ob man mit Router verbunden ist oder nicht => ohne Ping-Befehl.

  • Moin,

    Ich bin auf der Suche nach einem Script, dass die Verbindung zu meinem Router prüft, allerdings ohne den Ping-Befehl zur Hilfe zu nehmen. Mitttels Batch ist das für mich kein Problem (for-Schleife + Befehl netstat -an oder netstat -r), doch hab ich mit diesem Script jede Minute eine CPU Auslastung von ca. 50% und das ist natürlich keine Lösung.

    Da ich in VBS nicht die Leuchte bin, stehe ich nun vor folgendem Problem:

    Ich kenne nicht den Befehl, der mir ausgeben kann, ob die Verbindung zu meinem Router besteht oder nicht. Ich hab es zuletzt mit der WMI Classe "Win32_NetworkConnection" http://msdn.microsoft.com/en-us/library/aa394220(VS.85).aspx versucht, doch bekam ich keine brauchbaren Ergebnisse.

    Ein AutoIt Script, dass mir eine gute Vorlage zur WMI Classe "Win32_NetworkAdapterConfiguration" http://msdn.microsoft.com/en-us/library/aa394217(VS.85).aspx gab war diese hier:

    [autoit]


    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

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

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $strDefaultIPGateway = $objItem.DefaultIPGateway(0)
    $Output = $Output & "DefaultIPGateway: " & $strDefaultIPGateway & @CRLF
    $Output = $Output & "DHCPEnabled: " & $objItem.DHCPEnabled & @CRLF
    $Output = $Output & "DHCPLeaseExpires: " & WMIDateStringToDate($objItem.DHCPLeaseExpires) & @CRLF
    $Output = $Output & "DHCPLeaseObtained: " & WMIDateStringToDate($objItem.DHCPLeaseObtained) & @CRLF
    $Output = $Output & "DHCPServer: " & $objItem.DHCPServer & @CRLF
    $Output = $Output & "DNSDomain: " & $objItem.DNSDomain & @CRLF
    $strDNSDomainSuffixSearchOrder = $objItem.DNSDomainSuffixSearchOrder(0)
    $Output = $Output & "DNSDomainSuffixSearchOrder: " & $strDNSDomainSuffixSearchOrder & @CRLF
    $Output = $Output & "DNSEnabledForWINSResolution: " & $objItem.DNSEnabledForWINSResolution & @CRLF
    $Output = $Output & "DNSHostName: " & $objItem.DNSHostName & @CRLF
    $strDNSServerSearchOrder = $objItem.DNSServerSearchOrder(0)
    $Output = $Output & "DNSServerSearchOrder: " & $strDNSServerSearchOrder & @CRLF
    $Output = $Output & "DomainDNSRegistrationEnabled: " & $objItem.DomainDNSRegistrationEnabled & @CRLF
    $strIPAddress = $objItem.IPAddress(0)
    $Output = $Output & "IPAddress: " & $strIPAddress & @CRLF
    $strIPSubnet = $objItem.IPSubnet(0)
    $Output = $Output & "IPSubnet: " & $strIPSubnet & @CRLF
    $Output = $Output & "MACAddress: " & $objItem.MACAddress & @CRLF

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

    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_NetworkAdapterConfiguration" )
    Endif

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

    Func WMIDateStringToDate($dtmDate)

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

    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    [/autoit]

    Wäre froh, wenn mich jemand von Euch auf den Richtigen Pfad lotsen könnte.

    Thanks!

    • Offizieller Beitrag

    Anderer Ansatz:

    Spoiler anzeigen
    [autoit]


    $IP = "192.168.0.1" ; hier die IP-Adresse des Routers eintragen

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

    If _RouterConnected($IP) Then msgbox(0,'','connected!')

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

    Func _RouterConnected($IP)
    TCPStartUp()
    $socket = TCPConnect( $IP, 80 )
    If $socket = -1 Then Return 0
    TCPShutdown()
    Return 1
    EndFunc

    [/autoit]
  • Genau das suchte ich... hatte zwar in der Help von AutoIt nach dem passenden Befehl gesucht doch konnte diesen nicht finden... Vielen Dank Oscar!