как удаленно узнать настройки tcp/ip статические или динам.?

Обсуждение технических вопросов по продуктам Novell

как удаленно узнать настройки tcp/ip статические или динам.?

Сообщение Андрей Старков » 23 мар 2010, 15:07

стоит задача в одной подсетке поменять адрес dns сервера
есть компы с IP адресом получаемым по DHCP есть по статике, с DHCP понятно, новый сервер настроен, запущен, старый остановлен

теперь статические адреса. проверить включен ли dhcp отсюда плясать
все значения в реестре. Zenworks в сети настроен и работает, хотел уже писать application и вперед. НО! в пути реестра Services/Tcpip/Parameters/Interfaces вот тут упираемся что на каждой машине не один интерфейс и в реестре они по разному называются. тут я и приплыл

выход пока вижу писать какой нибудь cmd скрипт, который будет анализировать вывод ipconfig иди netsh, определять использование dhcp и если статика менять dns server

может кто то подскажет более красивый способ, как с этим справиться?
Андрей Старков
 
Сообщения: 473
Зарегистрирован: 21 июн 2002, 13:57
Откуда: г. Ноябрьск, ЯНАО

Сообщение Владимир Горяев » 23 мар 2010, 15:18

естли венда
ipconfig /all >>\\server\vol\fol\conf.txt
покажет типа как у меня
Подключение по локальной сети - Ethernet адаптер:

DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : Intel(R) 82566DM Gigabit Network Connection
Физический адрес. . . . . . . . . : xx-xx-xx-xx-xx-xx
Dhcp включен. . . . . . . . . . . : нет
Бардак автоматизировать невозможно!!!
_________________
Аватара пользователя
Владимир Горяев
 
Сообщения: 3473
Зарегистрирован: 05 июн 2002, 13:37
Откуда: Смоленск

Сообщение Андрей Старков » 23 мар 2010, 15:31

Владимир Горяев писал(а):естли венда
ipconfig /all >>\\server\vol\fol\conf.txt


Володя, вы не поняли. я могу получить эту инфу. мало того, через всякие token я могу скриптом вытащить это нет или да
но тут сплошные дебри - на нынешних компах интерфейсов больше чем один, но даже установив dhcp или статика, чтобы из скрипта поменять его тем же netsh я должен указать имя интерфейса. так как машины ставлю с образа, образ уже переделывал не раз и интерфейс может зваться вплоть до "Подключение локальной сети 8" или 2 или еще как.
тут мзг начинает уже пухнуть

мало того - если у человека статика, значит он у меня есть в dns значит я его знаю и где он сидит знаю. и доехать до той подсетки километра 2 всего :-) и пешком все 3 этажа обойти не проблема. но не кошерно :-)
вот и думаю.
и совета спрашиваю
Андрей Старков
 
Сообщения: 473
Зарегистрирован: 21 июн 2002, 13:57
Откуда: г. Ноябрьск, ЯНАО

Сообщение Clericos » 23 мар 2010, 16:22

Может проще всех перевести на динамику?

всем в скрипт "netsh winsock reset"

Ну это как вариант :)
Аватара пользователя
Clericos
 
Сообщения: 382
Зарегистрирован: 15 май 2007, 22:40
Откуда: *.spb.ru.

Сообщение Иван Иванов » 23 мар 2010, 16:51

выход пока вижу писать какой нибудь cmd скрипт, который будет анализировать вывод ipconfig иди netsh, определять использование dhcp и если статика менять dns server

Угу.
В скрипте который выполняется до основного приложения выгрузить все в текстовик. В основной части редактором текстовых файлов заменить DNS . Скриптом который выполняется после загрузить настройки обратно. Если не ошибаюсь текстовики правит зен от 6.0.
Иван Иванов
 
Сообщения: 448
Зарегистрирован: 19 апр 2004, 14:02

Сообщение Владимир Горяев » 23 мар 2010, 17:10

Андрей Старков писал(а):Володя, вы не поняли.
Вот выкать в здешнем форуме мне не надо. А то я подумаю што ты на меня в обиде :)
Вопрос был
как удаленно узнать настройки tcp/ip статические или динам.?
ответ был дан, вполне очевидный.
Бардак автоматизировать невозможно!!!
_________________
Аватара пользователя
Владимир Горяев
 
Сообщения: 3473
Зарегистрирован: 05 июн 2002, 13:37
Откуда: Смоленск

Re: как удаленно узнать настройки tcp/ip статические или дин

Сообщение bgInner » 24 мар 2010, 01:28

Андрей Старков писал(а):стоит задача в одной подсетке поменять адрес dns сервера
есть компы с IP адресом получаемым по DHCP есть по статике, с DHCP понятно, новый сервер настроен, запущен, старый остановлен

теперь статические адреса. проверить включен ли dhcp отсюда плясать
все значения в реестре. Zenworks в сети настроен и работает, хотел уже писать application и вперед. НО! в пути реестра Services/Tcpip/Parameters/Interfaces вот тут упираемся что на каждой машине не один интерфейс и в реестре они по разному называются. тут я и приплыл

выход пока вижу писать какой нибудь cmd скрипт, который будет анализировать вывод ipconfig иди netsh, определять использование dhcp и если статика менять dns server

может кто то подскажет более красивый способ, как с этим справиться?


Подскажу: можно использовать Windows Scripting в паре с WMI (Windows management instrumentation). Windows Scripting - это технология, позволяющая запускать сценарии (скритпы), написанные на VBScript и JavaScript как обычные BAT-файлы (это я на пальцах объясняю). WMI - это технология, позволяющая читать/писать многие системные параметры при помощи SQL-запросов типа
Код: Выделить всё
«SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled = True and DHCPEnabled = true"

Очень удобно.
Привожу пример:
============= начало файла GetDHCPsettings.wsf =============
Код: Выделить всё
<job>
   <script>

On Error Resume Next

call GetSettings
WScript.Quit

'****************************************************************************
Sub GetSettings

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery("SELECT * FROM " & _
"Win32_NetworkAdapterConfiguration where IPEnabled = True and DHCPEnabled = true")

For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & _
   "Network Adapter " & objNicConfig.Index & VbCrLf & _
   "  " & objNicConfig.Description & VbCrLf & VbCrLf & _
   "  DHCP Enabled:            " & objNicConfig.DHCPEnabled
  strIPAddresses = ""
  If Not IsNull(objNicConfig.IPAddress) Then
    For Each strIPAddress In objNicConfig.IPAddress
      strIPAddresses = strIPAddresses & VbCrLf & _
       "                           " & strIPAddress
    Next
  End If
  WScript.Echo "  IP Addresses: " & strIPAddresses
  strIPSubnets = ""
  If Not IsNull(objNicConfig.IPSubnet) Then
    For Each strIPSubnet In objNicConfig.IPSubnet
      strIPSubnets = strIPSubnets & VbCrLf & _
       "                           " & strIPSubnet
    Next
  End If
  WScript.Echo "  Subnet Masks: " & strIPSubnets
  strDefaultIPGateways = ""
  If Not IsNull(objNicConfig.DefaultIPGateway) Then
    For Each strDefaultIPGateway In objNicConfig.DefaultIPGateway
      strDefaultIPGateways = strDefaultIPGateways & VbCrLf & _
       "                           " & strDefaultIPGateway
    Next
  End If
  WScript.Echo "  Default Gateways: " & strDefaultIPGateways
  strGatewayCostMetrics = ""
  If Not IsNull(objNicConfig.GatewayCostMetric) Then
    For Each strGatewayCostMetric In objNicConfig.GatewayCostMetric
      strGatewayCostMetrics = strGatewayCostMetrics & VbCrLf & _
       "                           " & strGatewayCostMetric
    Next
  End If
  WScript.Echo "  Gateway Cost Metrics: " & strGatewayCostMetrics
  strDNSServerSearchOrder = ""
  If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
    For Each strDNSServer In objNicConfig.DNSServerSearchOrder
      strDNSServerSearchOrder = strDNSServerSearchOrder & VbCrLf & _
       "                           " & strDNSServer
    Next
  End If
  WScript.Echo "  DNS Server Search Order: " & strDNSServerSearchOrder
Next

End Sub

   </script>
</job>
============= конец файла GetDHCPsettings.wsf =============

Чтобы выполнить скрипт на удаленном компе, то (если память не изменяет) в строчке «Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")» вместо точки ставим имя или IP-адрес удаленного компа, а также вспоминаем, разрешено ли вам удаленное подключение к указанному компу.

Для запуска скрипта:
1. создайте файл GetDHCPsettings.wsf
2. проверьте, запущена ли служба «Расширения драйверов WMI (Windows Management Instrumentation)» - без нее скрипт может не выполниться
3. выполните следующую команду: cscript.exe /H:cscript

после этого можете запускать скрипт (желательно в консольном окне) простым нажатием клавиши ENTER.
А вот полная версия скрипта (не помню, где взял), которая может утсанавливать как DHCP, так и статику:
======================
Код: Выделить всё
<job>
   <script>

On Error Resume Next

' Get argument to find out what office we're in and set a switch based on it.
Set colArgs = WScript.Arguments
strOffice = LCase(colArgs(0))
Select Case strOffice
  Case "boston" blnDHCP = True
  Case "miami" blnDHCP = False
  Case "seattle" blnDHCP = True
  Case "dogpatch" blnDHCP = False
  Case Else WScript.Echo "Please enter the script name followed by a " & _
   "space and the name of a branch office." & _
   VbCrLf & "Valid names are: Boston, Miami, Seattle and Dogpatch." _
   : WScript.Quit
End Select

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

' If the office uses DHCP, call SetDHCP.
If blnDHCP = True Then
  WScript.Echo "You are in the " & colArgs(0) & " branch office." & _
   VbCrLf & "Enabling DHCP on all network adapters ..."
  SetDHCP
' If the office uses static IP, call SetStaticIP.
Else
  WScript.Echo "You are in the " & colArgs(0) & " branch office." & _
   VbCrLf & "Enabling static IP addressing on all network adapters ..."
  SetStaticIP
End If

'******************************************************************************
Sub SetDHCP

For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & "Network Adapter " & objNicConfig.Index & _
   VbCrLf & "  " & objNicConfig.Description & VbCrLf
  If Not objNicConfig.DHCPEnabled Then
    WScript.Echo "  Attempting to enable DHCP ..."
    intReturn = objNicConfig.EnableDHCP
    If intReturn = 0 Then
      WScript.Echo "  DHCP enabled."
    Else
      WScript.Echo "  Unable to enable DHCP."
    End If
    Err.Clear
  Else
    WScript.Echo "  DHCP already enabled" & VbCrLf & _
     "  DHCP Server:             " & objNicConfig.DHCPServer
    Err.Clear
  End If
Next
GetSettings

End Sub

'******************************************************************************
Sub SetStaticIP

arrIPAddresses = Array("192.168.0.12")
arrSubnetMasks = Array("255.255.255.0")
arrDefaultGateways = Array("192.168.0.1")
arrGatewayCostMetrics = Array(1)
arrDNSServers = Array("192.168.0.1")

For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & "Network Adapter " & objNicConfig.Index & VbCrLf & _
   "  " & objNicConfig.Description & VbCrLf
  If objNicConfig.DHCPEnabled Then
    WScript.Echo "  Attempting to disable DHCP and enable static IP ..."
    intStaticReturn = objNicConfig.EnableStatic(arrIPAddresses, arrSubnetMasks)
    If intStaticReturn = 0 Then
      WScript.Echo "  DHCP disabled, static IP address enabled."
      Set objNicChanged = objWMIService.Get _
       ("Win32_NetworkAdapterConfiguration.Index=" & objNicConfig.Index)
      intGatewaysReturn = objNicChanged.SetGateways(arrDefaultGateways, _
       arrGatewayCostMetrics)
      intDNSServers = objNicChanged.SetDNSServerSearchOrder(arrDNSServers)
      If intGatewaysReturn = 0 Then
        WScript.Echo "    Assigned new default gateways."
      Else
        WScript.Echo "    Unable to assign default gateways."
      End If
      If intDNSServers = 0 Then
        WScript.Echo "    Assigned new DNS servers."
      Else
        WScript.Echo "    Unable to assign DNS servers."
      End If
      Err.Clear
    Else
      WScript.Echo "  Unable to enable static IP address."
      Err.Clear
    End If
  Else
    WScript.Echo "  Static IP address already enabled."
  End If
Next
GetSettings

End Sub

'******************************************************************************
Sub GetSettings

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set colNicConfigs = objWMIService.ExecQuery("SELECT * FROM " & _
"Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

WScript.Echo VbCrLf & "Settings after operation:"
For Each objNicConfig In colNicConfigs
  WScript.Echo VbCrLf & _
   "Network Adapter " & objNicConfig.Index & VbCrLf & _
   "  " & objNicConfig.Description & VbCrLf & VbCrLf & _
   "  DHCP Enabled:            " & objNicConfig.DHCPEnabled
  strIPAddresses = ""
  If Not IsNull(objNicConfig.IPAddress) Then
    For Each strIPAddress In objNicConfig.IPAddress
      strIPAddresses = strIPAddresses & VbCrLf & _
       "                           " & strIPAddress
    Next
  End If
  WScript.Echo "  IP Addresses: " & strIPAddresses
  strIPSubnets = ""
  If Not IsNull(objNicConfig.IPSubnet) Then
    For Each strIPSubnet In objNicConfig.IPSubnet
      strIPSubnets = strIPSubnets & VbCrLf & _
       "                           " & strIPSubnet
    Next
  End If
  WScript.Echo "  Subnet Masks: " & strIPSubnets
  strDefaultIPGateways = ""
  If Not IsNull(objNicConfig.DefaultIPGateway) Then
    For Each strDefaultIPGateway In objNicConfig.DefaultIPGateway
      strDefaultIPGateways = strDefaultIPGateways & VbCrLf & _
       "                           " & strDefaultIPGateway
    Next
  End If
  WScript.Echo "  Default Gateways: " & strDefaultIPGateways
  strGatewayCostMetrics = ""
  If Not IsNull(objNicConfig.GatewayCostMetric) Then
    For Each strGatewayCostMetric In objNicConfig.GatewayCostMetric
      strGatewayCostMetrics = strGatewayCostMetrics & VbCrLf & _
       "                           " & strGatewayCostMetric
    Next
  End If
  WScript.Echo "  Gateway Cost Metrics: " & strGatewayCostMetrics
  strDNSServerSearchOrder = ""
  If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
    For Each strDNSServer In objNicConfig.DNSServerSearchOrder
      strDNSServerSearchOrder = strDNSServerSearchOrder & VbCrLf & _
       "                           " & strDNSServer
    Next
  End If
  WScript.Echo "  DNS Server Search Order: " & strDNSServerSearchOrder
Next

End Sub

   </script>
</job>

======================
Сон разума порождает чудовищ
bgInner
 
Сообщения: 54
Зарегистрирован: 11 мар 2009, 01:05
Откуда: Брест

Сообщение Андрей Старков » 24 мар 2010, 07:15

Владимир Горяев писал(а): Вот выкать в здешнем форуме мне не надо. А то я подумаю што ты на меня в обиде :)


Понял Володя :-)
больше не буду, и меньше тоже :-)

чегой то взыграла вежливость врожденная, и благодарность в душе что ты так быстро ответил.
Но формалистом быть не нужно :-) "удаленно узнать" был заголовок темы - такой все же лучше чем "Плииз, хелп ми очень срочно" :-)
Андрей Старков
 
Сообщения: 473
Зарегистрирован: 21 июн 2002, 13:57
Откуда: г. Ноябрьск, ЯНАО

Сообщение Андрей Старков » 24 мар 2010, 07:25

to bgInner
Спасибо большое, за столь подробное объяснение. Взял на заметку.

К сожалению, с vbscript'ом работаю вот только так, по аналогии. поэтому чаще всего в первую очередь его не рассматриваю...

но слишком много условий, службы запущенные и т.д. до сих пор я vbscript использовал только для насильной установки Zfdagent'а (инженеры удаленные от меня бывает не выполняют требование ставить с образа, ставят сами, Zfdagent'а не ставят.)

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

В этом случае, для себя решил пройтись ручками по компам, их не так много, до них не так далеко ехать, заодно аппаратную свою проверю :-)
Андрей Старков
 
Сообщения: 473
Зарегистрирован: 21 июн 2002, 13:57
Откуда: г. Ноябрьск, ЯНАО

Сообщение bgInner » 25 мар 2010, 02:31

Андрей Старков писал(а):to bgInner
Спасибо большое, за столь подробное объяснение. Взял на заметку.

К сожалению, с vbscript'ом работаю вот только так, по аналогии. поэтому чаще всего в первую очередь его не рассматриваю...

но слишком много условий, службы запущенные и т.д.


Условий никаких. Проверил скрипт при выключенной службе - работает (по крайней мере на Win XP sp3). Команду cscript.exe /H:cscript надо выполнить только ОДИН раз для последующего удобства, и то не обязательно это делать. Она просто устанавливает в качестве обработчика WSF-файлов по умолчанию консольную версию интерпретатора CSCRIPT.EXE вместо оконной (виндозной) версии интерпретатора WSCRIPT.EXE

Можно принудительно запускать скрипт в нужном интерпретаторе, указав это явным образом:
CSCRIPT.EXE myfile1.wsf
WSCRIPT.EXE myfile2.vb
CSCRIPT.EXE myfile3.js

до сих пор я vbscript использовал только для насильной установки Zfdagent'а (инженеры удаленные от меня бывает не выполняют требование ставить с образа, ставят сами, Zfdagent'а не ставят.)

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

В этом случае, для себя решил пройтись ручками по компам, их не так много, до них не так далеко ехать, заодно аппаратную свою проверю :-)


Хозяин-барин
:)

Повторюсь: WSH-скрипты можно выполнять на удаленной машине (не помню только, как задавать пользователя и пароль - надо в доке рыться). Кроме того, в JScript/VBScript есть замечательная вещь - регулярные выражения. По-моему, для разбора текстовой информации ничего лучшего нет.
Намного лучше всяких токенов. :)

P.S. Я года три назад написАл на MS VC++ программульку для установки настроек TCP/IP (статика, DHCP), которая является "деревянным" решением и работает в любых условиях и почти везде (Windows NT sp4, Windows 2000, Windows XP) и даже может брать настройки TCP/IP для ПЭВМ из заранее созданного INI-файла. Но переделать ее под вашу цель не могу (по крайней мере, пока) - очень мало свободного времени и слишком много в ней специфического кода, который я выложить просто так не могу.

Поищите в инете, я думаю, не один я такого рода прогу написал.
Сон разума порождает чудовищ
bgInner
 
Сообщения: 54
Зарегистрирован: 11 мар 2009, 01:05
Откуда: Брест

Сообщение Иван Иванов » 25 мар 2010, 12:18

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

Если это про мой совет то повторю.
например нам нужно dns 10.0.0.10 заменить на 20.0.0.20
1) Меняем dns в dhcp
2) В апликухе зена есть скрипт который выполняется до основной части приложения. туда пишем (только уточните правильный формат команды)
netsh dump d:\имяфайла.txt
в разделе редактирования файлов указываем для d:\имяфайла.txt 10.0.0.10 заменить на 20.0.0.20
в скрипте который выполняется после основной части приложения пишем
netsh exec d:\имяфайла.txt
3) проверяем сколько перезагрузок нужно если в системе 5 интерфейсов с одинаковым DNS (не помню зен заменяет все совпадения или до первого попадания, если второе то дублируем правку до любого разумного количества чтобы избежать лишних перезагрузок)
4) ставим условие выполнения - отсутствие файла с выгрузкой на ПК.
Всё.
Иван Иванов
 
Сообщения: 448
Зарегистрирован: 19 апр 2004, 14:02

Сообщение Влад А.Сокол aka Akina » 25 мар 2010, 17:41

Иван Иванов писал(а): туда пишем (только уточните правильный формат команды)
netsh dump d:\имяфайла.txt

Код: Выделить всё
netsh dump > d:\имяфайла.txt

Или всё вылетит на экран.

Иван Иванов писал(а):в разделе редактирования файлов указываем для d:\имяфайла.txt 10.0.0.10 заменить на 20.0.0.20

не, надо искать строку вида
Код: Выделить всё
set dns name="ИмяИнтерфейса" source=static addr=АдресDNSсервера register=PRIMARY

Нередко адреса ДНС и ещё чего-нить (чаще шлюза) совпадают - можно такого назаменять...

Иван Иванов писал(а):3) проверяем сколько перезагрузок нужно если в системе 5 интерфейсов с одинаковым DNS
Вообще-то перезагрузка не требуется, параметры хаваются на лету.

И ещё - с учётом того, как на самом деле Винды выполняют разрешение имени, для меня возможность существования DNS в свойствах нескольких интерфейсов - загадка...
Влад А.Сокол aka Akina
 
Сообщения: 1326
Зарегистрирован: 05 июн 2002, 09:24
Откуда: Зеленоград, Москва, Россия


Вернуться в Novell

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28