;------------------------------------------------------------------------------------------
; 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  bugfix@autoit.de
;------------------------------------------------------------------------------------------
#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
