Что нового

Смена IP адресса

Talany

Знающий
Сообщения
136
Репутация
11
Доброго времени суток, пользователи AutoIt!
Полазил на форуме, но не чего путного не нашел.
Мне надо чтобы скрипт менял ip компа.Но через @ComSpec или _RunDOS не вариант, так как скрипт будет запускатся на разных компах с разными OS и название подключения знать не могу!
Заранее благодарю!
 

scanfail

Знающий
Сообщения
244
Репутация
17
Так?
Код:
#include <CMD.au3>
#include <Inet.au3>
#include <GUIConstantsEx.au3>
#include <GuiIPAddress.au3>
#NoTrayIcon
$getip = _GetIP()
If $getip = 1 Then
    MsgBox(0, "Ошибка", "Проверьте подключение к Интернету или выключите брандмауэр. Программа не имеет доступа к Интернету.")
EndIf
$Form1 = GUICreate("IP-Changer", 437, 125, -1, -1)
$Group1 = GUICtrlCreateGroup("", 8, 8, 417, 105)
$IPAddress1 = _GUICtrlIpAddress_Create($Form1, 16, 48, 130, 21)
_GUICtrlIpAddress_Set($IPAddress1, "0.0.0.0")
$Label1 = GUICtrlCreateLabel("ТекущийIP:", 16, 24, 58, 17)
$Button1 = GUICtrlCreateButton("Возобновить", 16, 72, 131, 25, 0)
$Button2 = GUICtrlCreateButton("Получить новое IP", 168, 24, 243, 33, 0)
$Button3 = GUICtrlCreateButton("Текущий IP в буфере обмена", 168, 64, 243, 33, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
_GUICtrlIpAddress_Set($IPAddress1, $getip)    
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            $ip = _ip()
            MsgBox(0, "Успешно", "IP-адрес успешно обновлен")
        Case $Button2
            $pw = InputBox("Пароль", "Пожалуйста, введите свой пароль на маршрутизаторе", "0000", "*")
            _CMDStart(0)
            _CMDWrite('curl http://192.168.2.1/cgi-bin/login.cgi -d "pws=' & $pw & '"')
            _CMDWrite('curl http://192.168.2.1/cgi-bin/disconnect.exe')
            _CMDWrite('curl http://192.168.2.1/cgi-bin/connect.exe')
            _CMDEnd()
            GUICtrlSetState($Button1, @SW_DISABLE)
            GUICtrlSetData($Button1, "6")
            Sleep(1000)
            GUICtrlSetData($Button1, "5")
            Sleep(1000)
            GUICtrlSetData($Button1, "4")
            Sleep(1000)
            GUICtrlSetData($Button1, "3")
            Sleep(1000)
            GUICtrlSetData($Button1, "2")
            Sleep(1000)
            GUICtrlSetData($Button1, "1")
            Sleep(1000)
            GUICtrlSetState($Button1, @SW_ENABLE)
            GUICtrlSetData($Button1, "Возобновить")
        Case $Button3
            $ip = _GetIP()
            If $ip = 1 Then
                MsgBox(0, "Ошибка", "Проверьте подключение к Интернету или выключите брандмауэр. Программа не имеет доступа к Интернету.")
            EndIf
            ClipPut($ip)
    EndSwitch
WEnd


Func _ip()
    $aktuelleip = _GetIP()
    _GUICtrlIpAddress_Set($IPAddress1, $aktuelleip)    
EndFunc
 

scanfail

Знающий
Сообщения
244
Репутация
17
Добавил библиотеку на предыдущий пост.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Может это тебе позволит узнать имя сетевого подключения:
Код:
;===========================================================
; [0] - IP-адрес
; [1] - Маска подсети
; [2] - Основной шлюз
; [3] - Предпочитаемый DNS-сервис
; [4] - Альтернативный DNS-сервис
; [5] - Имя сетевого подключения
;===========================================================
Func _GetNetworkInfo()
	Local $iTempFile = @TempDir & '\NetInfo.txt'
	if FileExists($iTempFile) Then FileDelete($iTempFile)
    RunWait(@ComSpec & ' /C netsh interface ip show config >> ' & $iTempFile, '', @SW_HIDE)
    Local $iReg = StringRegExp(FileRead($iTempFile), '\d{2,3}\.\d{2,3}\.\d{1,3}\.\d{1,3}', 3)

    $objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    $objClass = $objWMIService.ExecQuery("Select * from Win32_NetworkAdapter")

    For $obj in $objClass
        $iVar = UBound($iReg)
        ReDim $iReg[$iVar + 1]
        $iReg[$iVar] = $obj.NetConnectionID
        ExitLoop
    Next

    Return $iReg
	FileDelete($iTempFile)
EndFunc
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Спасибо конечно за примеры, но это не вариант!
Надо чтобы скрипт работал локально, без кокого либо подключения к чему-нибудь!
На компах статические ip-шники!
А нельзя ли поменять ip через WIN-32 классы?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Talany
Я вот так меняю параметры подключения:
Код:
RunWait('netsh interface ip set address name=ETHERNET source=static addr=192.168.1.101 mask=255.255.255.0 gateway=192.168.1.1 gwmetric=1')
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
snoitaleR я бы тоже так менял, если бы я знал name=.
проблема в том что запуск скрипта будет не на одно машине, и на машене может быть навешана другая сетевуха!
 

Arei

Скриптер
Сообщения
938
Репутация
115
Zaramot
Если функция не возвращает имя, то что писать в функцию snoitaleR для name?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Talany
А если так?
Код:
MsgBox(0,'Название сетевого подключения',RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{B40B1793-BF7B-4DF2-9DD0-863678632688}\Connection','Name'))
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Talany
ответ 4 - узнать имя соединения
ответ 6 - поменять адрес зная имя.
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
snoitaleR твой пример у меня выдает мне пустое значение!
Kaster из примера 4 у меня обычные каракули в файле NetInfo.txt!
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Talany
ну тогда надо еще и cp866 -> win1252 используя Encoding.au3. поищи тут на форуме
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Функция _GetNetworkInfo() из примера Zaramot работает но массив(5) возвращает пустое значение!
В чем может быть проблема?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Talany
Код:
$COUNTER=1
 While True
  $NUMBER=RegEnumKey('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards',$COUNTER)
  If @error Then ExitLoop
  $CODE=RegRead('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\'&$NUMBER,'ServiceName')
  MsgBox(0,'Название сетевого подключения',RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\'&$CODE&'\Connection','Name'))
  $COUNTER+=1
 WEnd
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Благодарю snoitaleR работает! Значить будем работать в реестре :ok:
Тема решена! Всех благодарю!
 
Верх