- 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
;------------------------------------------------------------------------------------------
; 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