Что нового

[Сеть, интернет] Измение IP адерса средствами AutoIt

zoxer1

Знающий
Сообщения
72
Репутация
6
я новичек.
Мне постоянно надо настраивать сеть после переустановки (допустим)
Идея такая сделать скрипт чтоб он при запуске менял название сетевого подключения и IP адерс, шлюз и ДНС, все адреса вбиты допустим в массив или считываются из файла. Это все могу сделать указав явно координаты кнопочек, но мне нужно что нибудь проше, т.е. через командную строку или команду чтоб сразу открылось окно со Свойствами сетевого подключения.
Заранее благодарен
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Предположим, что нужно сменить IP адрес на 192.168.1.42, адресация в сети статическая, без использования DHCP, шлюз 192.168.1.1, маска 255.255.255.0 В этом случае, команда, которая должна быть выполнена из пакетного файла будет выглядеть следующим образом:

netsh interface ip set address name="FASTNET" static 192.168.1.42 255.255.255.0 192.169.1.1 1

Код:
ShellExecute
 

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Код:
$sComand = 'msconfig'
RunWait(@ComSpec & " /C " & $sComand, "", @SW_HIDE)
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
не понятно... можно пальцем ткнуть на рабочий пример?
начнем с того что как узнать как называется у меня сетевое подключение... может оно отличается от названия, устанавливаемого по умолчанию "Подключение по локальной сети"... как узнать это название, чтоб потом воспользоваться, допустим,
Код:
netsh interface ip set address name="FASTNET" static 192.168.1.42 255.255.255.0 192.169.1.1 1
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
zoxer1 [?]
начнем с того что как узнать как называется у меня сетевое подключение..

Код:
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"

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

If IsObj($colItems) then
   For $objItem In $colItems
if $objItem.NetConnectionID<>'' then ConsoleWrite($objItem.NetConnectionID & @LF)
   Next
Endif


ну потом наверно так:
Код:
$sComand = 'netsh interface ip set address name="Назнвание подкл." static 192.168.1.42 255.255.255.0 192.169.1.1 1'
RunWait(@ComSpec & " /C " & $sComand, "", @SW_HIDE)
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
первый скрипт не работает :'(
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
скрипт запускается и ничего не происходит
может мне стоит описать что я именно хочу сделать...
Вот переустановил винду на компе, или кто с ноутом пришел. Мне надо, чтоб при запуске скрипта он спросил местный ли комп... если местный скрипт должен менять Имя компа и айпи адреса (шлюзы + днс) из определенной базы адесов. Если не местный комп (ноут), то ему присваивает айпи адрес (от потолка) в этой подсети (например 192,168,1,1хх) не меняя имя компа...

поидее кажется не трудно... на деле у меня тупки.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
скрипт запускается и ничего не происходит
А что, если вывод в консоль
Код:
if $objItem.NetConnectionID<>'' then ConsoleWrite($objItem.NetConnectionID & @LF)

заменить на вывод в сообщение
Код:
if $objItem.NetConnectionID<>'' then MsgBox(64, "Net", $objItem.NetConnectionID)
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
Yuriy сказал(а):
скрипт запускается и ничего не происходит
А что, если вывод в консоль
Код:
if $objItem.NetConnectionID<>'' then ConsoleWrite($objItem.NetConnectionID & @LF)

заменить на вывод в сообщение
Код:
if $objItem.NetConnectionID<>'' then MsgBox(64, "Net", $objItem.NetConnectionID)


так вроде работает, выдает сообщение... буду пробовать =)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вот скрипт который позволяет установить IP через GUI:

Код:
#include <GuiConstants.au3>
#include <GuiIPAddress.au3>
#include <Misc.au3>

Global $i

$GUI_SET = GUICreate("Set IP address", 500, 270, -1, -1)
; --- Group -----
$Group1 = GUICtrlCreateGroup("LAN", 10, 10, 230, 190)
$Group2 = GUICtrlCreateGroup("Wi-Fi", 260, 10, 230, 190)
; --- Labals ----
$Label_3 = GUICtrlCreateLabel("Now is :", 20, 40, 40, 20)
$Label_19 = GUICtrlCreateLabel("Now is :", 270, 40, 60, 20)
$Label_13 = GUICtrlCreateLabel("IP", 20, 100, 60, 20)
$Label_14 = GUICtrlCreateLabel("Subnet", 20, 130, 60, 20)
$Label_15 = GUICtrlCreateLabel("Gateway", 20, 160, 60, 20)
$Label_23 = GUICtrlCreateLabel("IP", 270, 100, 60, 20)
$Label_24 = GUICtrlCreateLabel("Subnet", 270, 130, 70, 20)
$Label_25 = GUICtrlCreateLabel("Gateway", 270, 160, 60, 20)
; --- Radios ----
$DhcpLan = GUICtrlCreateRadio("DHCP", 130, 70, 70, 20)
$SetLan = GUICtrlCreateRadio("Set manually", 20, 70, 80, 20)
$DhcpWan = GUICtrlCreateRadio("DHCP", 380, 70, 70, 20)
$SetWan = GUICtrlCreateRadio("Set manually", 270, 70, 80, 20)
; --- Actual IP ----
$IpLanIs = _GUICtrlIpAddress_Create($GUI_SET, 70, 40, 140, 20)
_GUICtrlIpAddress_Set($IpLanIs, @IPAddress1)
$IpWanIs = _GUICtrlIpAddress_Create($GUI_SET, 320, 40, 140, 20)
_GUICtrlIpAddress_Set($IpWanIs, @IPAddress2)
; --- Settings IP ----
$IpLanSet = _GUICtrlIpAddress_Create($GUI_SET, 70, 100, 140, 20)
$SubLan = _GUICtrlIpAddress_Create($GUI_SET, 70, 130, 140, 20)
$GatLan = _GUICtrlIpAddress_Create($GUI_SET, 70, 160, 140, 20)

$IpWanSet = _GUICtrlIpAddress_Create($GUI_SET, 320, 100, 140, 20)
$SubWan = _GUICtrlIpAddress_Create($GUI_SET, 320, 130, 140, 20)
$GatWan = _GUICtrlIpAddress_Create($GUI_SET, 320, 160, 140, 20)

; --- buttons ----
$Set_IP = GUICtrlCreateButton("Set IP", 200, 220, 100, 30)
$Refresh = GUICtrlCreateButton("Refresh", 50, 220, 100, 30)
$Exit = GUICtrlCreateButton("Exit", 350, 220, 100, 30)
;
$StoredIpWanSet = "" ; a record of the last ip value read from the $IpWanSet
$StoredIpLanSet = "" ; a record of the last ip value read from the $IpLanSet
GUISetState()

While 1
	Sleep(20)
	
	$nMsg = GUIGetMsg()
	
	Select
		Case $nMsg = $GUI_EVENT_CLOSE Or $nMsg = $Exit Or _IsPressed("1B")
			ExitLoop
		Case $nMsg = $Refresh
			_Refresh()
		Case GUICtrlRead($SetLan) = 1 And $Set_IP = $nMsg
			$IpLanSeti = _GUICtrlIpAddress_Get($IpLanSet)
			$SubLani = _GUICtrlIpAddress_Get($SubLan)
			$GatLani = _GUICtrlIpAddress_Get($GatLan)
			RunWait(@ComSpec & " /c netsh interface ip set address " & Chr(34) & _Lanlang(1) & Chr(34) & " static " & $IpLanSeti & " " & $SubLani & " " & $GatLani & " 0", "", @SW_HIDE)
			MsgBox(32, "Done", "Your LAN is now Set !")
			_Refresh()
		Case GUICtrlRead($DhcpLan) = 1 And $Set_IP = $nMsg
			RunWait(@ComSpec & " /c netsh interface ip set address " & Chr(34) & _Lanlang(1) & Chr(34) & " dhcp", "", @SW_HIDE)
			MsgBox(32, "Done", "Your LAN is now in DHCP !")
			_Refresh()
		Case GUICtrlRead($SetWan) = 1 And $Set_IP = $nMsg
			$IpWanSeti = _GUICtrlIpAddress_Get($IpWanSet)
			$SubWani = _GUICtrlIpAddress_Get($SubWan)
			$GatWani = _GUICtrlIpAddress_Get($GatWan)
			RunWait(@ComSpec & " /c netsh interface ip set address " & Chr(34) & _Lanlang(0) & Chr(34) & " static " & $IpWanSeti & " " & $SubWani & " " & $GatWani & " 0", "", @SW_HIDE)
			MsgBox(32, "Done", "Your Wi-Fi is now Set !")
			_Refresh()
		Case GUICtrlRead($DhcpWan) = 1 And $Set_IP = $nMsg
			RunWait(@ComSpec & " /c netsh interface ip set address " & Chr(34) & _Lanlang(0) & Chr(34) & " dhcp", "", @SW_HIDE)
			MsgBox(32, "Done", "Your Wi-Fi is now in DHCP !")
			_Refresh()
		Case Not _GUICtrlIpAddress_IsBlank($IpWanSet)
			If GUICtrlRead($SetWan, $GUI_UNCHECKED) And $i = 0 Then
				$i = 1
				GUICtrlSetState($SetWan, $GUI_CHECKED)
			EndIf
			_GUICtrlIpAddress_Set($SubWan, "255.255.255.0")
			$lastIpWanSet = _GUICtrlIpAddress_Get($IpWanSet)
			If $lastIpWanSet <> $StoredIpWanSet Then
				_GUICtrlIpAddress_Set($GatWan, $lastIpWanSet)
				$StoredIpWanSet = $lastIpWanSet
			EndIf
		Case Not _GUICtrlIpAddress_IsBlank($IpLanSet)
			If GUICtrlRead($SetLan, $GUI_UNCHECKED) And $i = 0 Then
				$i = 1
				GUICtrlSetState($SetLan, $GUI_CHECKED)
			EndIf
			_GUICtrlIpAddress_Set($SubLan, "255.255.255.0")
			$lastIpLanSet = _GUICtrlIpAddress_Get($IpLanSet)
			If $lastIpLanSet <> $StoredIpLanSet Then
				_GUICtrlIpAddress_Set($GatLan, $lastIpLanSet)
				$StoredIpLanSet = $lastIpLanSet
			EndIf
	EndSelect
WEnd

Exit

;MsgBox(0, "Your OS Language:", _Lanlang())

Func _Lanlang($LAN)
	Select
		Case StringInStr("0409,0809,0c09,1009,1409,1809,1c09,2009,2409,2809,2c09,3009,3409", @OSLang);english
			If $LAN = 0 Then
				Return "Wireless Network Connection"
			Else
				Return "Local Area Connection"
			EndIf
		Case StringInStr("040c,080c,0c0c,100c,140c,180c", @OSLang); frensh
			If $LAN = 0 Then
				Return "Connexion rйseau sans fil"
			Else
				Return "Connexion au rйseau local"
			EndIf
		Case Else
			Return "Other (can't determine with @OSLang directly)"
	EndSelect
EndFunc

Func _Refresh()
	$i = 0
	GUICtrlSetState($DhcpLan, $GUI_UNCHECKED)
	GUICtrlSetState($SetLan, $GUI_UNCHECKED)
	GUICtrlSetState($DhcpWan, $GUI_UNCHECKED)
	GUICtrlSetState($SetWan, $GUI_UNCHECKED)
	_GUICtrlIpAddress_Set($IpLanIs, @IPAddress1)
	_GUICtrlIpAddress_Set($IpWanIs, @IPAddress2)
	_GUICtrlIpAddress_ClearAddress($IpLanSet)
	_GUICtrlIpAddress_ClearAddress($SubLan)
	_GUICtrlIpAddress_ClearAddress($GatLan)
	_GUICtrlIpAddress_ClearAddress($IpWanSet)
	_GUICtrlIpAddress_ClearAddress($SubWan)
	_GUICtrlIpAddress_ClearAddress($GatWan)
EndFunc
 
Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
CreatoR, Ваше скрипт вместо настроек Локального адреса показывает ИНтернет подключения :(

по совету Yuriy все показало правильно... у меня 3 сетевых подключения - выходит 3 сообщения с названиями подключении... теперь я пытаюсь их вывести в форму...накидал такой скриптик и теперь незнаю как обработать чекбоксы =(
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

$Form1 = GUICreate("Form1", 623, 445, 192, 124)
$Label1 = GUICtrlCreateLabel("Сетевые подключения", 16, 8, 137, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Ok_btn = GUICtrlCreateButton("ОК", 48, 328, 97, 25)
$wbemFlagReturnImmediately  = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter", "WQL",  $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$top = 30
If IsObj($colItems) then
	
	For $objItem In $colItems
		
		if $objItem.NetConnectionID<>'' then 
			GUICtrlCreateCheckbox($objItem.NetConnectionID, 20, $top, 250, 17)
			$top += 20
		Endif
	Next
EndIf
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Ok_btn
			change_ip()
	EndSwitch
WEnd
 
Func change_ip()
	;$sComand = 'netsh interface ip set address name="'& $connect_id &'" static 192.168.10.20 255.255.255.0 192.169.1.100 1'
	;RunWait(@ComSpec & " /C " & $sComand, "", @SW_HIDE)
EndFunc
 

renom

Новичок
Сообщения
127
Репутация
2
CreatoR сказал(а):
Вот скрипт который позволяет установить IP через GUI:

Код:
#include <GuiConstants.au3>
#include <GuiIPAddress.au3>
#include <Misc.au3>

Global $i

$GUI_SET = GUICreate("Set IP address", 500, 270, -1, -1)
; --- Group -----
$Group1 = GUICtrlCreateGroup("LAN", 10, 10, 230, 190)
$Group2 = GUICtrlCreateGroup("Wi-Fi", 260, 10, 230, 190)
; --- Labals ----
$Label_3 = GUICtrlCreateLabel("Now is :", 20, 40, 40, 20)
$Label_19 = GUICtrlCreateLabel("Now is :", 270, 40, 60, 20)
$Label_13 = GUICtrlCreateLabel("IP", 20, 100, 60, 20)
$Label_14 = GUICtrlCreateLabel("Subnet", 20, 130, 60, 20)
$Label_15 = GUICtrlCreateLabel("Gateway", 20, 160, 60, 20)
$Label_23 = GUICtrlCreateLabel("IP", 270, 100, 60, 20)
$Label_24 = GUICtrlCreateLabel("Subnet", 270, 130, 70, 20)
$Label_25 = GUICtrlCreateLabel("Gateway", 270, 160, 60, 20)
; --- Radios ----
$DhcpLan = GUICtrlCreateRadio("DHCP", 130, 70, 70, 20)
$SetLan = GUICtrlCreateRadio("Set manually", 20, 70, 80, 20)
$DhcpWan = GUICtrlCreateRadio("DHCP", 380, 70, 70, 20)
$SetWan = GUICtrlCreateRadio("Set manually", 270, 70, 80, 20)
; --- Actual IP ----
$IpLanIs = _GUICtrlIpAddress_Create($GUI_SET, 70, 40, 140, 20)
_GUICtrlIpAddress_Set($IpLanIs, @IPAddress1)
$IpWanIs = _GUICtrlIpAddress_Create($GUI_SET, 320, 40, 140, 20)
_GUICtrlIpAddress_Set($IpWanIs, @IPAddress2)
; --- Settings IP ----
$IpLanSet = _GUICtrlIpAddress_Create($GUI_SET, 70, 100, 140, 20)
$SubLan = _GUICtrlIpAddress_Create($GUI_SET, 70, 130, 140, 20)
$GatLan = _GUICtrlIpAddress_Create($GUI_SET, 70, 160, 140, 20)

$IpWanSet = _GUICtrlIpAddress_Create($GUI_SET, 320, 100, 140, 20)
$SubWan = _GUICtrlIpAddress_Create($GUI_SET, 320, 130, 140, 20)
$GatWan = _GUICtrlIpAddress_Create($GUI_SET, 320, 160, 140, 20)

; --- buttons ----
$Set_IP = GUICtrlCreateButton("Set IP", 200, 220, 100, 30)
$Refresh = GUICtrlCreateButton("Refresh", 50, 220, 100, 30)
$Exit = GUICtrlCreateButton("Exit", 350, 220, 100, 30)
;
$StoredIpWanSet = "" ; a record of the last ip value read from the $IpWanSet
$StoredIpLanSet = "" ; a record of the last ip value read from the $IpLanSet
GUISetState()

While 1
	Sleep(20)
	
	$nMsg = GUIGetMsg()
	
	Select
		Case $nMsg = $GUI_EVENT_CLOSE Or $nMsg = $Exit Or _IsPressed("1B")
			ExitLoop
		Case $nMsg = $Refresh
			_Refresh()
		Case GUICtrlRead($SetLan) = 1 And $Set_IP = $nMsg
			$IpLanSeti = _GUICtrlIpAddress_Get($IpLanSet)
			$SubLani = _GUICtrlIpAddress_Get($SubLan)
			$GatLani = _GUICtrlIpAddress_Get($GatLan)
			RunWait(@ComSpec & " /c netsh interface ip set address " & Chr(34) & _Lanlang(1) & Chr(34) & " static " & $IpLanSeti & " " & $SubLani & " " & $GatLani & " 0", "", @SW_HIDE)
			MsgBox(32, "Done", "Your LAN is now Set !")
			_Refresh()
		Case GUICtrlRead($DhcpLan) = 1 And $Set_IP = $nMsg
			RunWait(@ComSpec & " /c netsh interface ip set address " & Chr(34) & _Lanlang(1) & Chr(34) & " dhcp", "", @SW_HIDE)
			MsgBox(32, "Done", "Your LAN is now in DHCP !")
			_Refresh()
		Case GUICtrlRead($SetWan) = 1 And $Set_IP = $nMsg
			$IpWanSeti = _GUICtrlIpAddress_Get($IpWanSet)
			$SubWani = _GUICtrlIpAddress_Get($SubWan)
			$GatWani = _GUICtrlIpAddress_Get($GatWan)
			RunWait(@ComSpec & " /c netsh interface ip set address " & Chr(34) & _Lanlang(0) & Chr(34) & " static " & $IpWanSeti & " " & $SubWani & " " & $GatWani & " 0", "", @SW_HIDE)
			MsgBox(32, "Done", "Your Wi-Fi is now Set !")
			_Refresh()
		Case GUICtrlRead($DhcpWan) = 1 And $Set_IP = $nMsg
			RunWait(@ComSpec & " /c netsh interface ip set address " & Chr(34) & _Lanlang(0) & Chr(34) & " dhcp", "", @SW_HIDE)
			MsgBox(32, "Done", "Your Wi-Fi is now in DHCP !")
			_Refresh()
		Case Not _GUICtrlIpAddress_IsBlank($IpWanSet)
			If GUICtrlRead($SetWan, $GUI_UNCHECKED) And $i = 0 Then
				$i = 1
				GUICtrlSetState($SetWan, $GUI_CHECKED)
			EndIf
			_GUICtrlIpAddress_Set($SubWan, "255.255.255.0")
			$lastIpWanSet = _GUICtrlIpAddress_Get($IpWanSet)
			If $lastIpWanSet <> $StoredIpWanSet Then
				_GUICtrlIpAddress_Set($GatWan, $lastIpWanSet)
				$StoredIpWanSet = $lastIpWanSet
			EndIf
		Case Not _GUICtrlIpAddress_IsBlank($IpLanSet)
			If GUICtrlRead($SetLan, $GUI_UNCHECKED) And $i = 0 Then
				$i = 1
				GUICtrlSetState($SetLan, $GUI_CHECKED)
			EndIf
			_GUICtrlIpAddress_Set($SubLan, "255.255.255.0")
			$lastIpLanSet = _GUICtrlIpAddress_Get($IpLanSet)
			If $lastIpLanSet <> $StoredIpLanSet Then
				_GUICtrlIpAddress_Set($GatLan, $lastIpLanSet)
				$StoredIpLanSet = $lastIpLanSet
			EndIf
	EndSelect
WEnd

Exit

;MsgBox(0, "Your OS Language:", _Lanlang())

Func _Lanlang($LAN)
	Select
		Case StringInStr("0409,0809,0c09,1009,1409,1809,1c09,2009,2409,2809,2c09,3009,3409", @OSLang);english
			If $LAN = 0 Then
				Return "Wireless Network Connection"
			Else
				Return "Local Area Connection"
			EndIf
		Case StringInStr("040c,080c,0c0c,100c,140c,180c", @OSLang); frensh
			If $LAN = 0 Then
				Return "Connexion rйseau sans fil"
			Else
				Return "Connexion au rйseau local"
			EndIf
		Case Else
			Return "Other (can't determine with @OSLang directly)"
	EndSelect
EndFunc

Func _Refresh()
	$i = 0
	GUICtrlSetState($DhcpLan, $GUI_UNCHECKED)
	GUICtrlSetState($SetLan, $GUI_UNCHECKED)
	GUICtrlSetState($DhcpWan, $GUI_UNCHECKED)
	GUICtrlSetState($SetWan, $GUI_UNCHECKED)
	_GUICtrlIpAddress_Set($IpLanIs, @IPAddress1)
	_GUICtrlIpAddress_Set($IpWanIs, @IPAddress2)
	_GUICtrlIpAddress_ClearAddress($IpLanSet)
	_GUICtrlIpAddress_ClearAddress($SubLan)
	_GUICtrlIpAddress_ClearAddress($GatLan)
	_GUICtrlIpAddress_ClearAddress($IpWanSet)
	_GUICtrlIpAddress_ClearAddress($SubWan)
	_GUICtrlIpAddress_ClearAddress($GatWan)
EndFunc
Почему то IP не устанавливается...если он вообще должен его устанавливать))
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Как делаю я :
Код:
$ip="netsh interface ip set address name=""Подключение по локальной сети 1"" source=static addr=192.168.100.1 mask=255.255.255.0 gateway=192.168.100.10 gwmetric=1"
_RunDOS($ip)
 

renom

Новичок
Сообщения
127
Репутация
2
VladUs сказал(а):
Как делаю я :
Код:
$ip="netsh interface ip set address name=""Подключение по локальной сети 1"" source=static addr=192.168.100.1 mask=255.255.255.0 gateway=192.168.100.10 gwmetric=1"
_RunDOS($ip)
_RunDOS($ip)
^ERROR

ERROR;Unknown function name
 

VladUs

Скриптер
Сообщения
621
Репутация
181
В начало скрипта :

#include<process.au3>


Добавлено:
Сообщение автоматически объединено:

Вот код полностью :

#include<process.au3>

$ip="netsh interface ip set address name=""Подключение по локальной сети 1"" source=static addr=192.168.100.1 mask=255.255.255.0 gateway=192.168.100.10 gwmetric=1"
_RunDOS($ip)
 
Верх