Netzwerkadapter vom Netz trennen

    • Offizieller Beitrag

    Hi,
    da im Forum die Frage auftauchte, wie man einen manuell konfigurierten Netzwerkadapter per Softwarebefehl trennen kann, habe ich meine Lösung gleich mal in eine Funktion verpackt.

    Vorgabezeit (default) bis zum Zurückstellen auf den Standardgateway ist 2000 ms. Es kann, optional, jede beliebige Zeit übergeben werden.
    Wird "0" übergeben, funktioniert die Funktion als "NOT-AUS". Der Standardgateway wird dann nicht wiederhergestellt.


    Spoiler anzeigen
    [autoit]

    ;------------------------------------------------------------------------------------------
    ; Funktion _ChangeGatewayAndBack($MY_IP, $GATEWAY_IP, $FAKE_GATEWAY_IP [,$TIMEOUT=-1])
    ;
    ; Beschreibung Trennt die Verbindung zwischen PC und Router (Netzwerk), indem man dem
    ; Netzwerkadapter kurzzeitig einen falschen Gateway zuweist.
    ; Der Adapter muss manuell konfiguriert sein.
    ;
    ; Parameter $MY_IP IP des Netzwerkadapters
    ; $GATEWAY_IP Gateway
    ; $FAKE_GATEWAY_IP falsche IP
    ; $TIMEOUT Zeitdauer bis der Standardgateway wieder aktiv wird
    ; -1 (default) 2000 ms
    ; 0 NOTAUS! Standardgateway wird NICHT zurückgesetzt
    ; n in Milisekunden (beliebig)
    ;
    ; Autor BugFix [email='bugfix@autoit.de'][/email]
    ;------------------------------------------------------------------------------------------
    #include <array.au3>
    Func _ChangeGatewayAndBack($MY_IP, $GATEWAY_IP, $FAKE_GATEWAY_IP ,$TIMEOUT=-1)
    Local $ARGATEWAY = _ArrayCreate($GATEWAY_IP, $GATEWAY_IP)
    Local $ARFAKEGATEWAY = _ArrayCreate($FAKE_GATEWAY_IP, $FAKE_GATEWAY_IP)
    Local $TIME, $EMERGENCY = 0, $strComputer = "."
    Switch $TIMEOUT
    Case -1
    $TIME = 2000
    Case 0
    $EMERGENCY = 1
    Case Else
    $TIME = $TIMEOUT
    EndSwitch
    $objWMIService = ObjGet("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
    $colNetCards = $objWMIService.ExecQuery _
    ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
    If $EMERGENCY = 0 Then
    For $objNetCard in $colNetCards
    If $objNetCard.IPAddress(0) = $MY_IP Then
    $objNetCard.SetGateways($ARFAKEGATEWAY)
    Sleep($TIME)
    $objNetCard.SetGateways($ARGATEWAY)
    ExitLoop
    EndIf
    Next
    Else
    For $objNetCard in $colNetCards
    If $objNetCard.IPAddress(0) = $MY_IP Then
    $objNetCard.SetGateways($ARFAKEGATEWAY)
    ExitLoop
    EndIf
    Next
    EndIf
    EndFunc ;==>_ChangeGatewayAndBack

    [/autoit]
    • Offizieller Beitrag

    Hi,

    ist es ohne <Array.au3> nicht eleganter?

    Spoiler anzeigen
    [autoit]

    ;------------------------------------------------------------------------------------------
    ; Funktion _ChangeGatewayAndBack($MY_IP, $GATEWAY_IP, $FAKE_GATEWAY_IP [,$TIMEOUT=-1])
    ;
    ; Beschreibung Trennt die Verbindung zwischen PC und Router (Netzwerk), indem man dem
    ; Netzwerkadapter kurzzeitig einen falschen Gateway zuweist.
    ; Der Adapter muss manuell konfiguriert sein.
    ;
    ; Parameter $MY_IP IP des Netzwerkadapters
    ; $GATEWAY_IP Gateway
    ; $FAKE_GATEWAY_IP falsche IP
    ; $TIMEOUT Zeitdauer bis der Standardgateway wieder aktiv wird
    ; -1 (default) 2000 ms
    ; 0 NOTAUS! Standardgateway wird NICHT zurückgesetzt
    ; n in Milisekunden (beliebig)
    ;
    ; Autor BugFix [email='bugfix@autoit.de'][/email]
    ;------------------------------------------------------------------------------------------

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

    _ChangeGatewayAndBack(@IPAddress1, '192.168.1.1','10.10.10.10', 10000)

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

    Func _ChangeGatewayAndBack($MY_IP, $GATEWAY_IP, $FAKE_GATEWAY_IP, $TIMEOUT = -1)
    Local $ARGATEWAY[2] = [$GATEWAY_IP, $GATEWAY_IP]
    Local $ARFAKEGATEWAY[2] = [$FAKE_GATEWAY_IP, $FAKE_GATEWAY_IP]
    Local $TIME, $EMERGENCY = 0, $strComputer = "."
    Switch $TIMEOUT
    Case - 1
    $TIME = 2000
    Case 0
    $EMERGENCY = 1
    Case Else
    $TIME = $TIMEOUT
    EndSwitch
    $objWMIService = ObjGet("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
    $colNetCards = $objWMIService.ExecQuery _
    ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
    If $EMERGENCY = 0 Then
    For $objNetCard In $colNetCards
    If $objNetCard.IPAddress (0) = $MY_IP Then
    $objNetCard.SetGateways ($ARFAKEGATEWAY)
    Sleep($TIME)
    $objNetCard.SetGateways ($ARGATEWAY)
    ExitLoop
    EndIf
    Next
    Else
    For $objNetCard In $colNetCards
    If $objNetCard.IPAddress (0) = $MY_IP Then
    $objNetCard.SetGateways ($ARFAKEGATEWAY)
    ExitLoop
    EndIf
    Next
    EndIf
    EndFunc ;==>_ChangeGatewayAndBack

    [/autoit]

    So long,

    Mega