Jump to content

Автоматизация сетевых настроек


Recommended Posts

СУПЕР!!! Ты ведь поделишся этим инсталом ,хотя бы что б посмотреть его в работе? Вообще было б классно исходник ,что б каждый админ мог под свою сетку подправить настройки (если ты конечно согласишся выложить ...) .

 

э.... а где проблема сомому сделать? возьмите любой инсталлятор и наваяйте на нем. по-моему с таким справится любой инсталлятор... еще книженцию по реестру виндовому и в путь!

Link to post
Share on other sites
  • Replies 66
  • Created
  • Last Reply

Top Posters In This Topic

реестр не обязательно можно много сделать через netsh

довольно продвинутая штука под винды

например добавить авторизатор в списко разрешенных для брендмауера

Link to post
Share on other sites

Довно жду такой задумки. Времени не хвататет тоже осуществить такое. На ХАБЕ видел аналог для создания подключений, прога платная. цену не помню. В принципе за программу такого типа и назначения готов наверно бы заплатить не космические деньги. Я думаю есть смысл кто шарит взятся за это дело, думаю труд ваш оценять.

 

Если потестить надо, то всегда за. На большом количестве абонентов? ЗА! :)

Link to post
Share on other sites

да сам не успеваю ничего. почитал мануальчик по инсталлятору... все можно сделать. вопрос только в том, что должно быть в пакете. сильно раздувать его тоже неохота, а потом доставлять софт для сети тоже юзерам напряг.

 

 

я вот думаю как раздуплюсь, я СЕБЕ сделаю что-бы при переустановки винды (уж забыл когда такое было... ;) ) сразу скопом ставить все что нужно, а не сидеть и не парить мозги.

Link to post
Share on other sites
Так выделил "СЕБЕ"... Жадина чтоли? ;)))))

не ну ясное дело! ;))

 

просто набор устанавливаемого софта довольно личная штука. это если просто на машину. да и юзерам в сети тоже.

 

http://www.google.com.ua/search?hl=ru&q=ns...B2+Google&meta=

 

вот те линк :) а вообще хоршо-бы не самому это делать. Hamil как я знаю сам проггер так что можете его дружно просить. он справиться :))

Link to post
Share on other sites
Ну собственно по теме :

С масками ,шлюзами , днс всё в порядке - работает ,

а вот

 

 
REM Прописываем сетевую группу...
net localgroup GROUPBUH /add
REM Прописываем описание сетевой группы...
net localgroup GROUPBUH /comment:"Бухгалтерия"
REM Прописываем пользователя в группу...
net localgroup GROUPBUH VASYA /add

Трабла ,везде пишет команда выполнена успешно. Перезагружаюсь , смотрю группа прежняя.

Запускаю повторно , пишет группа существует, хотя в сетевом её даж нету.

 

PS Что то не замечал где нах-ся описание рабочей группы и что означает прописать пользователя в рабочую группу :bue:

Так никто не знает почему рабочая группа не меняется?

Link to post
Share on other sites

REM IP i maska...
netsh interface ip set address name="Simnet" source=static addr=10.7.23.25 mask=255.255.0.0
REM Shluz...
netsh interface ip set address name="Simnet" gateway=10.7.0.128 gwmetric=0
REM DNS1...
netsh interface ip set dns name="Simnet" source=static addr=10.7.0.254 register=PRIMARY
REM DNS2...
netsh interface ip set dns name="Simnet" source=static addr=192.168.0.1 register=2
REM WINS...
netsh interface ip set wins name="Simnet" source=static addr=10.7.0.128

REM Finish...

Вот такой батник есть. Но ни как не выходит сделать, чтоб заполнялась графа Альтернативный DNS-сервер. :tongue:

Подскажите плз :=

Link to post
Share on other sites

Интересная тема.

Вот только батником решить все настройки невозможно.

Поэтому, пришлось почитать про VBScript, и вот что вышло в итоге.

Скопировать, вставить где надо свои значения и сохранить с расширением .vbs.

Может есть программер который сможет на базе этого слепить екзешник :)

будет вообще супер.

' Настройка параметров TCP/IP для работы в сети

' Windows Server 2003 : Yes
' Windows XP : Yes
' Windows 2000 : Yes
' Windows NT 4.0 : Yes
' Windows 98 : Yes
'================================================
' Прописываем ИП, маску сети, шлюз
strComputer = "."
Dim ip
Dim home
Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
   ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
ip = inputbox ("Введите последнюю цифру Вашего IP адреса (192.168.1.хх)")
strIPAddress = Array("192.168.1."& (ip))
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.1.222")
strGatewayMetric = Array(1)

For Each objNetAdapter in colNetAdapters
   errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
   errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
   If errEnable = 0 Then
       msgbox ("Ваш IP изменен на: 192.168.1."&ip)
   Else
       WScript.Echo "Ошибка. Введен непопустимый символ"
   End If
Next
'================================================
'Прописываем ДНС
On Error Resume Next
arrNewDNSServerSearchOrder = Array("192.168.1.14", "192.168.1.222")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs
   If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
   For Each strDNSServer In objNicConfig.DNSServerSearchOrder
Next
 End If
 intSetDNSServers = objNicConfig.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder)
Next
Set colNicConfigs = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
For Each objNicConfig In colNicConfigs
 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
   For Each strDNSServer In objNicConfig.DNSServerSearchOrder
 Next
 End If
Next
'================================================
' Вгоняем комп в рабочую группу (названия групп = номеру дома)
On Error Resume Next

Const JOIN_DOMAIN = 0
home = inputbox ("Введите номер дома")
strDomainName = (home)

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colCompSystems = objWMIService.ExecQuery ("SELECT * FROM Win32_ComputerSystem")
For Each objCompSystem In colCompSystems
 intJoinDomain = objCompSystem.JoinDomainOrWorkgroup(strDomainName,,,, JOIN_DOMAIN)
Next
Set colCompSystems = objWMIService.ExecQuery ("SELECT * FROM Win32_ComputerSystem")
For Each objCompSystem In colCompSystems
Next
'===============================================
'Пишем юзеру сообщение, что все сделано
Dim objShell, intValue 
Set objShell = CreateObject("WScript.Shell") 
intValue = objShell.Popup("Компьтер был добавлен в рабочую группу -" & strDomainName & "." & vbCRLF & "Для продолжения работы необходимо перезагрузить компьтер.", , , vbExclamation + vbOKOnly) 
'===============================================
'Ребутим комп, чтобы активировать рабочую группу
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\\" & strComputer & "\root\cimv2") 
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") 
For Each objOperatingSystem in colOperatingSystems 
ObjOperatingSystem.Reboot() 
Next

P.S: Рабочие группы у меня по номерам домов, ну а вы можете варьировать как вам надо.

Удачи.

Link to post
Share on other sites
Интересная тема.

Вот только батником решить все настройки невозможно.

Поэтому, пришлось почитать про VBScript, и вот что вышло в итоге.

Скопировать, вставить где надо свои значения и сохранить с расширением .vbs.

Может есть программер который сможет на базе этого слепить екзешник ;)

будет вообще супер.

' Настройка параметров TCP/IP для работы в сети

' Windows Server 2003 : Yes
' Windows XP : Yes
' Windows 2000 : Yes
' Windows NT 4.0 : Yes
' Windows 98 : Yes
'================================================
' Прописываем ИП, маску сети, шлюз
strComputer = "."
Dim ip
Dim home
Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
   ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
ip = inputbox ("Введите последнюю цифру Вашего IP адреса (192.168.1.хх)")
strIPAddress = Array("192.168.1."& (ip))
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.1.222")
strGatewayMetric = Array(1)

For Each objNetAdapter in colNetAdapters
   errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
   errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
   If errEnable = 0 Then
       msgbox ("Ваш IP изменен на: 192.168.1."&ip)
   Else
       WScript.Echo "Ошибка. Введен непопустимый символ"
   End If
Next
'================================================
'Прописываем ДНС
On Error Resume Next
arrNewDNSServerSearchOrder = Array("192.168.1.14", "192.168.1.222")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs
   If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
   For Each strDNSServer In objNicConfig.DNSServerSearchOrder
Next
 End If
 intSetDNSServers = objNicConfig.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder)
Next
Set colNicConfigs = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
For Each objNicConfig In colNicConfigs
 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
   For Each strDNSServer In objNicConfig.DNSServerSearchOrder
 Next
 End If
Next
'================================================
' Вгоняем комп в рабочую группу (названия групп = номеру дома)
On Error Resume Next

Const JOIN_DOMAIN = 0
home = inputbox ("Введите номер дома")
strDomainName = (home)

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colCompSystems = objWMIService.ExecQuery ("SELECT * FROM Win32_ComputerSystem")
For Each objCompSystem In colCompSystems
 intJoinDomain = objCompSystem.JoinDomainOrWorkgroup(strDomainName,,,, JOIN_DOMAIN)
Next
Set colCompSystems = objWMIService.ExecQuery ("SELECT * FROM Win32_ComputerSystem")
For Each objCompSystem In colCompSystems
Next
'===============================================
'Пишем юзеру сообщение, что все сделано
Dim objShell, intValue 
Set objShell = CreateObject("WScript.Shell") 
intValue = objShell.Popup("Компьтер был добавлен в рабочую группу -" & strDomainName & "." & vbCRLF & "Для продолжения работы необходимо перезагрузить компьтер.", , , vbExclamation + vbOKOnly) 
'===============================================
'Ребутим комп, чтобы активировать рабочую группу
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\\" & strComputer & "\root\cimv2") 
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") 
For Each objOperatingSystem in colOperatingSystems 
ObjOperatingSystem.Reboot() 
Next

P.S: Рабочие группы у меня по номерам домов, ну а вы можете варьировать как вам надо.

Удачи.

Супер,

 

вот только одно. У нас сейчас некий гемор с айпихами , тобиш по каждую кв выделяем спец айпиху ,которую юзер просто не запоминает ,а после переустановки винды только спохватывается. ..

 

Вобщем нужно вклинить туда сопоставленные квартиры - айпи

и через после ввода № своей квартиры юзверю забивался бы айпи .

 

Вот правил кусочек ,но не работает. Подскажите как правильно.

 

ip = inputbox ("Введите № вашей квартиры")

ip=kv

If kv=("2") Then ip=("133")

If kv=("4") Then ip=("139")

If kv=("8") Then ip=("114")

 

 

Else

WScript.Echo "Ошибка. Извините,вашей квартиры нет в базе"

End If

Link to post
Share on other sites

вот только одно. У нас сейчас некий гемор с айпихами , тобиш по каждую кв выделяем спец айпиху ,которую юзер просто не запоминает ,а после переустановки винды только спохватывается. ..

 

Вобщем нужно вклинить туда сопоставленные квартиры - айпи

и через после ввода № своей квартиры юзверю забивался бы айпи .

 

Вот правил кусочек ,но не работает. Подскажите как правильно.

 

ip = inputbox ("Введите № вашей квартиры")

ip=kv

If kv=("2") Then ip=("133")

If kv=("4") Then ip=("139")

If kv=("8") Then ip=("114")

 

 

Else

      WScript.Echo "Ошибка. Извините,вашей квартиры нет в базе"

  End If

Попробуй так..

Вроде работает

strComputer = "."
Dim ip
Dim home
Dim kv
Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
   ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
kv = inputbox ("Ввести номер кв")
If kv = ("10") Then 
ip = ("12")
ElseIf kv = ("11") Then 
ip = ("9")
ElseIf kv = ("12") Then 
ip = ("8")
Else
       WScript.Echo "Ошибка"
   End If

Возможно и не самое лучшее решение. ;)

Link to post
Share on other sites

ребята, да чего вы паритесь? простейший инсталлятор (NSIS я ща почитываю... просто как 2 байта...) умеет и писать в реестр и выполнять любые проги и командную строку и все что угодно. что еще нужно? нормальный привычный человечный интерфейс, возможность все это дело бесконечно расширять-наращивать-улучшать и это далеко не все чем так вкуен полноценный инсталлятор.

Link to post
Share on other sites
Интересная тема.

Вот только батником решить все настройки невозможно.

Поэтому, пришлось почитать про VBScript, и вот что вышло в итоге.

Скопировать, вставить где надо свои значения и сохранить с расширением .vbs.

Может есть программер который сможет на базе этого слепить екзешник :)

будет вообще супер.

' Настройка параметров TCP/IP для работы в сети

' Windows Server 2003 : Yes
' Windows XP : Yes
' Windows 2000 : Yes
' Windows NT 4.0 : Yes
' Windows 98 : Yes
'================================================
' Прописываем ИП, маску сети, шлюз
strComputer = "."
Dim ip
Dim home
Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
   ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
ip = inputbox ("Введите последнюю цифру Вашего IP адреса (192.168.1.хх)")
strIPAddress = Array("192.168.1."& (ip))
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.1.222")
strGatewayMetric = Array(1)

For Each objNetAdapter in colNetAdapters
   errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
   errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
   If errEnable = 0 Then
       msgbox ("Ваш IP изменен на: 192.168.1."&ip)
   Else
       WScript.Echo "Ошибка. Введен непопустимый символ"
   End If
Next
'================================================
'Прописываем ДНС
On Error Resume Next
arrNewDNSServerSearchOrder = Array("192.168.1.14", "192.168.1.222")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs
   If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
   For Each strDNSServer In objNicConfig.DNSServerSearchOrder
Next
 End If
 intSetDNSServers = objNicConfig.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder)
Next
Set colNicConfigs = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
For Each objNicConfig In colNicConfigs
 If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
   For Each strDNSServer In objNicConfig.DNSServerSearchOrder
 Next
 End If
Next
'================================================
' Вгоняем комп в рабочую группу (названия групп = номеру дома)
On Error Resume Next

Const JOIN_DOMAIN = 0
home = inputbox ("Введите номер дома")
strDomainName = (home)

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colCompSystems = objWMIService.ExecQuery ("SELECT * FROM Win32_ComputerSystem")
For Each objCompSystem In colCompSystems
 intJoinDomain = objCompSystem.JoinDomainOrWorkgroup(strDomainName,,,, JOIN_DOMAIN)
Next
Set colCompSystems = objWMIService.ExecQuery ("SELECT * FROM Win32_ComputerSystem")
For Each objCompSystem In colCompSystems
Next
'===============================================
'Пишем юзеру сообщение, что все сделано
Dim objShell, intValue 
Set objShell = CreateObject("WScript.Shell") 
intValue = objShell.Popup("Компьтер был добавлен в рабочую группу -" & strDomainName & "." & vbCRLF & "Для продолжения работы необходимо перезагрузить компьтер.", , , vbExclamation + vbOKOnly) 
'===============================================
'Ребутим комп, чтобы активировать рабочую группу
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\\" & strComputer & "\root\cimv2") 
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") 
For Each objOperatingSystem in colOperatingSystems 
ObjOperatingSystem.Reboot() 
Next

P.S: Рабочие группы у меня по номерам домов, ну а вы можете варьировать как вам надо.

Удачи.

Вылезла трабла у бзверей с несколькими сетевыми картами. Настройки забиваются в каждую из карточек , из-за чего не могут корректно работать протоколы (не доступно ...). Качать из сетки можно ,а чаты и др. не работают.

 

Кто может подсказать какое решение?

Link to post
Share on other sites
ребята, да чего вы паритесь? простейший инсталлятор (NSIS я ща почитываю... просто как 2 байта...) умеет и писать в реестр и выполнять любые проги и командную строку и все что угодно. что еще нужно? нормальный привычный человечный интерфейс, возможность все это дело бесконечно расширять-наращивать-улучшать и это далеко не все чем так вкуен полноценный инсталлятор.

Если уже прошарился что к чему отпишись поподробнее плыз ,желательно с примером этого NSIS...

Link to post
Share on other sites

ой на примеры времени нету, а так все просто. складываешь файлики, пишешь что в реестр записать, и ваяешь скриптик. там все просто. что куда распаковать, какие варианты установки , что ставить, ну и там примочки типа языков и другого. потом делаешь секцию анинсталла, что-бы это дело могло корректно удалиться, и в принципе все. еще есть возможность рисовать свои страницы с полями ввода и остальным. потом это дело можно повпихивать в файлы настройки какой-либо лабуды, которая держит настройки в фалах а не в реестре.... в общем просто нужно немного времени.

Link to post
Share on other sites
ой на примеры времени нету, а так все просто. складываешь файлики, пишешь что в реестр записать, и ваяешь скриптик. там все просто. что куда распаковать, какие варианты установки , что ставить, ну и там примочки типа языков и другого. потом делаешь секцию анинсталла, что-бы это дело могло корректно удалиться, и в принципе все. еще есть возможность рисовать свои страницы с полями ввода и остальным. потом это дело можно повпихивать в файлы настройки какой-либо лабуды, которая держит настройки в фалах а не в реестре.... в общем просто нужно немного времени.

Теперь понял что имелось ввиду... Сенкс

Трабла с настройкой всех (вместо 1го) сетевых интефейсов ещё актульна ... (

Link to post
Share on other sites

2frig:

Ну наваяй)

Советовать все могут.

 

Пока скрипт, выкинутый gall, является самым лучшим советом в этой теме.

Link to post
Share on other sites

одно время пытался написать такое на Делфи, загвоздка стала в том что не смог определить имена ВСЕХ интерфейсов на машине... если кто подскажет как это определить, выдам на гора софт автонастроечный вместе с исходниками...

Link to post
Share on other sites

да рано или поздно прийдется, сей час совсем нет времени. сначала нужно определиться с функционалом и включенным софтом

Link to post
Share on other sites
  • 2 weeks later...

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

 

Получился скрипт на perl

#!/usr/bin/perl

($cgi_script) = ($0 =~ m:(.*)[/\\](.*)[1];
$ip = $ENV{'REMOTE_ADDR'};
$url = 'http://' . $ENV{'HTTP_HOST'} . $ENV{'REQUEST_URI'};
$debug = 0;

$addr{'192.168.0.0/24'} = 'one';
$addr{'55.22.207.66'} = 'two';
$addr{'55.22.200.19'} = 'three';

$settings{one}[0] = $ip;
$settings{one}[1] = '255.255.255.0';
$settings{one}[2] = '192.168.0.129';
$settings{one}[3] = '172.16.2.126';

$settings{two}[0] = '';
$settings{two}[1] = '255.255.255.0';
$settings{two}[2] = '192.168.4.129';
$settings{two}[3] = '192.168.4.129';

$settings{three}[0] = '';
$settings{three}[1] = '255.255.255.0';
$settings{three}[2] = '192.168.3.129';
$settings{three}[3] = '192.168.3.129';

$settings{amn}[0] = '';
$settings{amn}[1] = '255.255.255.0';
$settings{amn}[2] = '194.58.162.129';
$settings{amn}[3] = '194.58.162.129';

if($ENV{'REQUEST_METHOD'} eq 'POST') {read STDIN, $query, $ENV{'CONTENT_LENGTH'};}
else {$query = $ENV{'QUERY_STRING'};}

if($query eq '')
{

foreach $net (keys %addr)
{
 ($op, $mask) = split/\//, $net;
 $mask = 32 if ($mask eq '');
 $pop = unpack "L", pack "C4", split /\./, $op;
 $pip = unpack "L", pack "C4", split /\./, $ip;
 $pmask = unpack "L", pack "B32", (1 x $mask);
 if (($pip & $pmask) == ($pop & $pmask)) { $now = $addr{$net}; last; }
}

print "Content-type: text/html\n\n";

print qq~
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=cp1251">
<META HTTP-EQUIV="Pragma" CONTENT="No-Cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="No-Cache,Must-Revalidate,No-Store">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<title>Автоматическая настройка подключения</title>
<script>
function checkform()
{
if(settings.ip.value=="")
{
alert("Введите IP-адрес")
return false;
}

if(settings.mask.value=="")
{
alert("Введите маску подсети")
return false;
}

if(settings.gate.value=="")
{
alert("Введите основной шлюз")
return false;
}

if(settings.dns.value=="")
{
alert("Введите Предпочитаемый DNS-сервер")
return false;
}

return true;
}
</script>
</head>
<body bgcolor="#6696bc">
<center>
<h2>Создание файла автоматической настройки подключения к локальной сети</h2>
<h3>Внимание: файл настройки будет сохранять те значения, которые вы укажете сейчас.<br>Поэтому, пожалуйста, заполняйте поля внимательно.<br>Файл настройки работает для Windows NT/9x/XP/2000/2003.</h3>
<FORM name="settings" ACTION="$cgi_script" METHOD="POST" onsubmit="return checkform()">
<table border="0"  cellspacing="0" cellpadding="5"  leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<tr><td align=right>IP-адрес: <td><INPUT name="ip" type=text size=15 maxlength=15 value="$settings{$now}[0]"></td></tr>
<tr><td align=right>Маска подсети: <td><INPUT name="mask" type=text size=15 maxlength=15 value="$settings{$now}[1]"></td></tr>
<tr><td align=right>Основной шлюз: <td><INPUT name="gate" type=text size=15 maxlength=15 value="$settings{$now}[2]"></td></tr>
<tr><td align=right>Предпочитаемый DNS-сервер: <td><INPUT name="dns" type=text size=15 maxlength=15 value="$settings{$now}[3]"></td></tr>
<tr><td align=right><INPUT type=reset value="по умолчанию"> <td><input type=submit value='        скачать        '></td></tr>
</table>
</FORM>
<a href="$cgi_script">обновить</a></center></font><br></body></html>
~;

}
else
{

@pairs = split(/&/, $query);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ s/<([^>]|\n)*>//g;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<([^>]|\n)*>//g;
$p{$name} = $value;
}

$filename = "settings $p{ip}.vbs";

$file = qq~
Option Explicit
On Error Resume Next
Dim objWMIService
Dim objNetAdapter
Dim strComputer
Dim strGateway
Dim strGatewayMetric
Dim strAddress
Dim strIPAddress
Dim strSubnetMask
Dim colNetAdapters
Dim errEnable
Dim errGateways
Dim objShell
Dim intValue
Dim Button
Dim arrNewDNSServerSearchOrder
Dim colNicConfigs
Dim objNicConfig
Dim strDNSServer
Dim intSetDNSServers
Dim strMask
Dim strGate
Dim strDns

strComputer = "."
strAddress = ("$p{ip}")
strMask = ("$p{mask}")
strGate = ("$p{gate}")
strDns = ("$p{dns}")

strIPAddress = Array(strAddress)
strSubnetMask = Array(strMask)
strGateway = Array(strGate)
strGatewayMetric = Array(1)
arrNewDNSServerSearchOrder = Array(strDns)

Button = MsgBox ("Сейчас вам будет предложено применить настройки к каждой сетевой карте из имеющихся в системе." & vbCRLF & _
"Нажмите ''Ok'' для той сетевой карты, которую нужно настроить." & vbCRLF & _
"Для остальных карточек нажимайте ''Нет''." & vbCRLF & _
"Нажмите ''Отмена'', если хотите выйти." & vbCRLF & _
"Перед тем, как нажать кнопку ''Ok'' убедитесь, что подключение к локальной сети включено и сетевой кабель вставлен в сетевую карту." & vbCRLF & _
"Без этих условий настройки не сохранятся." & vbCRLF & vbCRLF & _
"Применяемые настройки: " & vbCRLF & _
"IP: " & strAddress & vbCRLF & _
"Маска: " & strMask & vbCRLF & _
"Шлюз: " & strGate & vbCRLF & _
"DNS: " & strDns & vbCRLF, vbOKOnly + vbInformation, "Настройка подключения")

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\\\" & strComputer & "\\root\\cimv2")
Set colNetAdapters = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled = TRUE")

for Each objNetAdapter in colNetAdapters
Button = MsgBox ("Сетевая карта: " & vbCRLF & objNetAdapter.Caption & vbCRLF & vbCRLF & _
"Сохранять настройки для неё?" & vbCRLF & _
"Ок - сохранение настроек, Нет - нет, Отмена - выход", vbYesNoCancel + vbQuestion, "Сохранение настроек")
If Button = vbYes Then
 errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
 errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
 intSetDNSServers = objNetAdapter.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder)
 If errEnable = 0 Then
  Button = MsgBox ("IP изменен на: " & strAddress & vbCRLF & _
  "Маска изменена на: " & strMask & vbCRLF & _
  "Шлюз изменен на: " & strGate & vbCRLF & _
  "DNS изменен на: " & strDns & vbCRLF & vbCRLF & "Для сетевой карты: " & vbCRLF & objNetAdapter.Caption, _
  vbOKOnly + vbInformation, "Сохранение настроек")
 Else
  Button = MsgBox ("Ошибка. Некорректные настройки, скачайте файл настройки заново." & vbCRLF & _
  "Файл настройки можно скачать по адресу:" & vbCRLF & _
  "$url", vbOKOnly + vbCritical, "Ошибка настройки")
 End If
End If
if Button = vbCancel Then
   WScript.Quit
End if
Next

WScript.Quit
~;

print "Content-type: application/vbs\r\nContent-disposition: attachment; filename=\"$filename\"\r\n\r\n";

@a = split /\n/, $file;
$, = "\r\n";
foreach $b (@a)
{
chomp $b;
chomp $b;
print "$b\r\n";
}

}

 

Который, будучи скормленным веб серверу, будет выдавать страничку.

На страничке можно написать ип, маску, шлюз, днс и нажать кнопку "скачать".

Кроме того, скрипт пытается по ИП адресу зашедшего на страничку определить и подставить его параметры.

У меня они описаны в начале скрипта.

Но так же можно указывать любые параметры.

В результате нажатия кнопки "скачать" на ваш компьютер сохранится vbs файл с этими настройками.

Файл будет примерно такой:

Option Explicit
On Error Resume Next
Dim objWMIService
Dim objNetAdapter
Dim strComputer
Dim strGateway
Dim strGatewayMetric
Dim strAddress
Dim strIPAddress
Dim strSubnetMask
Dim colNetAdapters
Dim errEnable
Dim errGateways
Dim objShell
Dim intValue
Dim Button
Dim arrNewDNSServerSearchOrder
Dim colNicConfigs
Dim objNicConfig
Dim strDNSServer
Dim intSetDNSServers
Dim strMask
Dim strGate
Dim strDns

strComputer = "."
strAddress = ("192.168.0.5")
strMask = ("255.255.255.0")
strGate = ("192.168.0.129")
strDns = ("172.16.2.126")
strIPAddress = Array(strAddress)
strSubnetMask = Array(strMask)
strGateway = Array(strGate)
strGatewayMetric = Array(1)
arrNewDNSServerSearchOrder = Array(strDns)

Button = MsgBox ("Сейчас вам будет предложено применить настройки к каждой сетевой карте из имеющихся в системе." & vbCRLF & _
"Нажмите ''Ok'' для той сетевой карты, которую нужно настроить." & vbCRLF & _
"Для остальных карточек нажимайте ''Нет''." & vbCRLF & _
"Нажмите ''Отмена'', если хотите выйти." & vbCRLF & _
"Перед тем, как нажать кнопку ''Ok'' убедитесь, что подключение к локальной сети включено и сетевой кабель вставлен в сетевую карту." & vbCRLF & _
"Без этих условий настройки не сохранятся." & vbCRLF & vbCRLF & _
"Применяемые настройки: " & vbCRLF & _
"IP: " & strAddress & vbCRLF & _
"Маска: " & strMask & vbCRLF & _
"Шлюз: " & strGate & vbCRLF & _
"DNS: " & strDns & vbCRLF, vbOKOnly + vbInformation, "Настройка подключения")

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled = TRUE")

for Each objNetAdapter in colNetAdapters
Button = MsgBox ("Сетевая карта: " & vbCRLF & objNetAdapter.Caption & vbCRLF & vbCRLF & _
"Сохранять настройки для неё?" & vbCRLF & _
"Ок - сохранение настроек, Нет - нет, Отмена - выход", vbYesNoCancel + vbQuestion, "Сохранение настроек")
If Button = vbYes Then
 errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
 errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
 intSetDNSServers = objNetAdapter.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder)
 If errEnable = 0 Then
  Button = MsgBox ("IP изменен на: " & strAddress & vbCRLF & _
  "Маска изменена на: " & strMask & vbCRLF & _
  "Шлюз изменен на: " & strGate & vbCRLF & _
  "DNS изменен на: " & strDns & vbCRLF & vbCRLF & "Для сетевой карты: " & vbCRLF & objNetAdapter.Caption, _
  vbOKOnly + vbInformation, "Сохранение настроек")
 Else
  Button = MsgBox ("Ошибка. Некорректные настройки, скачайте файл настройки заново." & vbCRLF & _
  "Файл настройки можно скачать по адресу:" & vbCRLF & _
  "http://elizovo.ru/cgi-bin/settings.cgi", vbOKOnly + vbCritical, "Ошибка настройки")
 End If
End If
if Button = vbCancel Then
   WScript.Quit
End if
Next

WScript.Quit

 

Файл выдает различные информационные сообщения.

И что самое главное, при переборе сетевых адаптеров каждый раз спрашивает, применять ли настройки.

Таким образом можно явно указать, для какой сетевухи сохранять параметры.

У меня в сети используется один DNS сервер, поэтому и подставляется один.

Но для двух серверов файл переписать нетрудно.

 

2Флэшмобер:

Имена всех интерфейсов не нужны.

Нужны только те, у которых есть TCP/IP прооткол.

Как я понял из доков, это легко делается через WMI.

Вот пример кода, реализующего это:

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled = TRUE")

 

И потом перебирая адаптеры из colNetAdapters.... )

Опытным путем было установлено, что такой запрос показывает только включенные адаптеры.

 

И ещё просьба - если будете делать инсталлятор, оставьте место для программ типа inetaccess или wintray.

Получится первосортная программа типа "Установка интернета на компьютер".

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...