Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   узнать какой IP будет у шлюза перед тем как создать маршрут (http://forum.oszone.net/showthread.php?t=296764)

eXtremer 12-03-2015 10:28 2481645

узнать какой IP будет у шлюза перед тем как создать маршрут
 
У меня есть пользователи который до сих пор используют Windows XP, для них я нашел/переделал код ниже, потому что в тот момент у меня небыло машина с Windows XP на руках, я тестил на Windows Server 2003, код работал без вопросов, теперь при попытке воспроизвести тот же код на машине Windows XP, к сожалению код не работает. Помогите пожалуйста ешить проблему.
Объясняю зачем мне нужен этот код, шлюз каждый раз меняется (динамический) и мне сначало нужно узнать какой IP будет у шлюза перед тем как создать маршрут.

Код:

@rasdial VPN username password
@setlocal
@for /f "tokens=1-2 delims=:" %%i in ('ipconfig ^| find "IP Address" ^| find "172.23"') do set GETIP=%%j
@route add 172.30.255.0 mask 255.255.255.0 %GetIp%
@endlocal

Host: 172.30.255.22
Gateway/Шлюз: один случайный IP из данного диапазона 172.23.241.2-172.23.241.254

Спасибо.

*Не забываем что речь идет о Windows XP, в Windows 7 и выше это решается горазда легче.

Foreigner 12-03-2015 11:25 2481669

А ХР локализованная? Попробуйте вместо find "IP Address" find "IP"

eXtremer 12-03-2015 12:18 2481690

Цитата:

Цитата Foreigner
А ХР локализованная? Попробуйте вместо find "IP Address" find "IP" »

Не хочу отметить как решено пока не попробую еще как минимум на 2 машины. Но ты реально помог, вроде работает, спасибо огромное!

Код:

D:\Admin>VPN.bat
Connecting to VPN...
Verifying username and password...
Registering your computer on the network...
Successfully connected to VPN.
Command completed successfully.

 :\Admin>set GETIP= 172.23.241.95

D:\Admin>


eXtremer 12-03-2015 21:19 2481910

Скрипт видимо работает только с Windows XP (english version), с локализацией не хочет, IP (%GETIP%) не отображается, почему?

Код:

@echo off
@rasdial VPN user password
@setlocal
@for /f "tokens=1-2 delims=:" %%i in ('ipconfig ^| find "IP" ^| find "172.23"') do set GETIP=%%j
@ECHO IP address: %GETIP%
@endlocal

Код:

D:\>VPN2.bat
Установка связи с VPN...
Проверка имени и пароля пользователя...
Регистрация компьютера в сети...
Установлена связь с VPN.
Команда успешно завершена.
IP address:
 
D:\>


Foreigner 12-03-2015 21:36 2481923

eXtremer, Выложи вывод ipconfig

eXtremer 12-03-2015 21:44 2481925

Тот же самый код на Windows Server 2003 (english), отображает IP:

Код:

D:\Admin>VPN2.bat
Connecting to VPN...
Verifying username and password...
Registering your computer on the network...
Successfully connected to VPN.
Command completed successfully.

 :\Admin>set GETIP= 172.23.241.172
IP address:  172.23.241.172

D:\Admin>


Вот ipconfig после подключения PPTP

Код:

C:\Documents and Settings\Администратор>ipconfig

Настройка протокола IP для Windows


Подключение по локальной сети - Ethernet адаптер:

        DNS-суффикс этого подключения . . : lan
        IP-адрес  . . . . . . . . . . . . : 192.168.1.66
        Маска подсети . . . . . . . . . . : 255.255.255.0
        Основной шлюз . . . . . . . . . . : 192.168.1.254

VPN - PPP адаптер:

        DNS-суффикс этого подключения . . :
        IP-адрес  . . . . . . . . . . . . : 172.23.241.173
        Маска подсети . . . . . . . . . . : 255.255.255.255
        Основной шлюз . . . . . . . . . . :

C:\Documents and Settings\Администратор>


Foreigner 12-03-2015 21:51 2481928

eXtremer, Попробуйте так:
Код:

for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IP.*172\.23.*"') do set "getip=%%i"

eXtremer 12-03-2015 21:57 2481932

Foreigner, к сожалению - без изменений.

Код:

@echo off
@rasdial VPN user password
@setlocal
@for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IP.*172\.23.*"') do set "getip=%%i"
@ECHO IP address: %getip%
@endlocal

Код:

D:\>VPN2.bat
Установка связи с VPN...
Проверка имени и пароля пользователя...
Регистрация компьютера в сети...
Установлена связь с VPN.
Команда успешно завершена.
IP address:

D:\>


Foreigner 12-03-2015 22:19 2481942

eXtremer, Сложно сказать, вроде в локализованной ХП были какие-то проблемы с парсингом ipconfig, вроде вместо конца строки null. Из файла же (вывода ipconfig) все отработало нормально. Попробуйте так:
Код:

@echo off
setlocal

for /f "tokens=*" %%i in ('ipconfig') do call:set %%i
echo %ip%
route add 172.30.255.0 mask 255.255.255.0 %ip%
goto:eof

:set
echo %* | 1>nul findstr "IP.*172\.23.*" && (

    for %%i in (%*) do set "ip=%%i"

)


eXtremer 12-03-2015 23:31 2481963

Код:

@rasdial VPN user password
@echo off
setlocal

for /f "tokens=*" %%i in ('ipconfig') do call:set %%i
echo %ip%
route add 172.30.255.0 mask 255.255.255.0 %ip%
goto:eof

:set
echo %* | 1>nul findstr "IP.*172\.23.*" && (

    for %%i in (%*) do set "ip=%%i"

)

Код:

D:\>VPN3.bat
Установка связи с VPN...
Проверка имени и пароля пользователя...
Регистрация компьютера в сети...
Установлена связь с VPN.
Команда успешно завершена.
Режим вывода команд на экран (ECHO) отключен.

Обработка таблиц сетевых маршрутов.

ROUTE [-f] [-p] [команда [узел]
                  [MASK маска] [шлюз] [METRIC метрика] [IF-интерфейс]

  -f          Очистка таблиц маршрутов от записей для всех шлюзов.  При
              указании одной из команд, таблицы очищаются до выполнения
              команды.
  -p          При использовании с командой ADD задает сохранение маршрута
              при перезагрузке системы. По умолчанию маршруты не
              сохраняются при перезагрузке. Игнорируется для остальных команд,
              изменяющих соответствующие постоянные маршруты.
              Этот параметр не поддерживается в Windows 95.
  команда      Одна из четырех команд
                PRINT    Печать маршрута
                ADD      Добавление маршрута
                DELETE    Удаление маршрута
                CHANGE    Изменение существующего маршрута
  узел        Адресуемый узел.
  MASK        Если вводится ключевое слово MASK, то следующий параметр
              интерпретируется как параметр "маска".
  маска        Значение маски подсети, связываемое с записью для данного
              маршрута.  Если этот параметр не задан, по умолчанию
              подразумевается 255.255.255.255.
  шлюз        Шлюз.
  METRIC      Определение параметра метрика/цена для адресуемого узла.

Поиск всех символических имен узлов проводится в файле сетевой базы данных
NETWORKS. Поиск символических имен шлюзов проводится в файле базы данных
имен узлов HOSTS.

Для команд PRINT и DELETE можно указать узел и шлюз с помощью подстановочных
знаков или опустить параметр "шлюз".

Если адресуемый узел содержит подстановочные знаки * или ?, он используется
в качестве шаблона, и печатаются только соответствующие ему маршруты.
Знак '*' соответствует любой строке, а '?' - ровно одному знаку.
Примеры: 157.*.1, 157.*, 127.*, *224*.
Диагностические сообщения:
    Недопустимое значение MASK вызывает ошибку, если (УЗЕЛ & МАСКА) != УЗЕЛ.
    Например> route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
              Добавление маршрута завершится ошибкой, поскольку указан
              недопустимый параметр сетевой маски: не выполняется условие
              (УЗЕЛ & МАСКА) == УЗЕЛ.

Примеры:

    > route PRINT
    > route ADD 157.0.0.0 MASK 255.0.0.0  157.55.80.1 METRIC 3 IF 2
                    узел^      ^маска    ^шлюз      метрика^    ^
                                                        интерфейс^
      Если IF не задан, то производится попытка найти лучший интерфейс для
      указанного шлюза.
    > route PRINT
    > route PRINT 157*          .... Печать только узлов, начинающихся со 157
    > route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2

      CHANGE используется для изменения только для изменения адреса
      основного шлюза и/или метрики.
    > route PRINT
    > route DELETE 157.0.0.0
    > route PRINT

D:\>

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

eXtremer 13-03-2015 10:31 2482083

Я только что поднял образ "Windows XP Professional SP3 x86 RU VL" на VMware всё работает отлично. Как я говорил, наверное система с которой я работал вчера не работало правельно. Уже походу дело когда буду поднимать VPN на компы клиентов посмотрю что получется. Спасибо.

mariolast 03-04-2015 00:01 2491176

Есть такой батник

REM создает в текущем каталоге готовый BAT-файл для
REM переноса текущих IP настроек на другой компьютер
REM и файл с именем компьютера

CLS
echo on

ipconfig | find "IPv4" > temp.txt
for /f "delims=: tokens=1-26" %%C in (temp.txt) do (echo %%D > ip.txt)

ipconfig | find "Маска" > temp.txt
for /f "delims=: tokens=1-26" %%C in (temp.txt) do (echo %%D > mask.txt)

ipconfig | find "шлюз" > temp.txt
for /f "delims=: tokens=1-26" %%C in (temp.txt) do (echo %%D > gate.txt)

Вот на последнем этапе в файле temp.txt
Основной шлюз. . . . . . . . . : 192.168.1.1
Основной шлюз. . . . . . . . . :
Основной шлюз. . . . . . . . . :

А в gate.txt записывается
Режим вывода команд на экран (ECHO) отключен

Не могу понять, в чем дело.

Foreigner 03-04-2015 01:30 2491202

mariolast, Лучше через wmic:
Код:

@echo off
setlocal

set "wmic=wmic nicconfig where ipenabled='true' get DefaultIPGateway,IPAddress,IPSubnet /value"
for /f %%i in (' "%wmic%" ') do 1>nul set "%%i"

for /f "tokens=1 delims={}," %%i in ("%DefaultIPGateway%") do echo gateway: %%~i
for /f "tokens=1 delims={}," %%i in ("%IPAddress%") do echo ipaddress: %%~i
for /f "tokens=1 delims={}," %%i in ("%IPSubnet%") do echo ipsubnet: %%~i


mariolast 03-04-2015 07:48 2491245

Аесли надо в текстовый файл писать?
Задача стоит в следующем.
Создать в текущем каталоге готовый BAT-файл для переноса текущих IP настроек на другой компьютер и файл с именем компьютера
Содержание батника

Код:

CLS
echo off
 
ipconfig | find "IPv4" > temp.txt
for /f "delims=: tokens=1-26" %%C in (temp.txt) do (echo %%D > ip.txt)
 
ipconfig | find "Маска"  > temp.txt
for /f "delims=: tokens=1-26" %%C in (temp.txt) do (echo %%D > mask.txt)
 
ipconfig | find "шлюз" > temp.txt
for /f "delims=: tokens=1-26" %%C in (temp.txt) do (echo %%D > gate.txt)
pause
vbs_getIP.vbs
 
del temp.txt
del gate.txt
del mask.txt
del ip.txt
del setip.txt

Содержание vbs скрипта

Код:

Set ADODBStream = CreateObject("ADODB.Stream")
ADODBStream.Type = 2
ADODBStream.Charset =  "UTF-8"
ADODBStream.Open()
ADODBStream.LoadFromFile("ip.txt")
Text = ADODBStream.ReadText()
ADODBStream.Close()
 
dim str
str = Cstr(Text)
str1=""
 
for i=1 to len(str)
    i1=mid(str,i,1)
    iC=Asc(i1)
    if (iC>45 and iC<58) then
        str1=str1+i1 
    end if
next
varIP=str1
 
REM ***************************************************
REM *      Забираем маску из файла    *
REM ***************************************************
 
Set ADODBStream = CreateObject("ADODB.Stream")
ADODBStream.Type = 2
ADODBStream.Charset =  "UTF-8"
ADODBStream.Open()
ADODBStream.LoadFromFile("mask.txt")
Text = ADODBStream.ReadText()
ADODBStream.Close()
 
str = Cstr(Text)
str1=""
 
for i=1 to len(str)
    i1=mid(str,i,1)
    iC=Asc(i1)
    if (iC>45 and iC<58) then
        str1=str1+i1 
    end if
next
varMASK=str1
 
REM ***************************************************
REM *      Забираем шлюз из файла      *
REM ***************************************************
 
Set ADODBStream = CreateObject("ADODB.Stream")
ADODBStream.Type = 2
ADODBStream.Charset =  "UTF-8"
ADODBStream.Open()
ADODBStream.LoadFromFile("gate.txt")
Text = ADODBStream.ReadText()
ADODBStream.Close()
 
str = Cstr(Text)
str1=""
 
for i=1 to len(str)
    i1=mid(str,i,1)
    iC=Asc(i1)
    if (iC>45 and iC<58) then
        str1=str1+i1 
    end if
next
varGATE=str1
 
REM ***************************************************
REM *  Формируем текст батника для NETSH  *
REM ***************************************************
 
str1 = "netsh interface ip set address name="+chr(34)+"Подключение по локальной сети"+chr(34)+ " static  " + varIP + " " + varMASK + " " + varGATE+" 1"
 
REM *****************************************************
REM *  пишем строку  для запуска батника  в файл *
REM *****************************************************
 
msgbox str1,,"Кошки правят!"
 
test = "setip.bat"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set TestTeam = objFSO.OpenTextFile(test, 2, True)
Set File = objFSO.GetFile(test)   
TestTeam.WriteLine str1
TestTeam.close


Foreigner 03-04-2015 10:02 2491286

mariolast, Перенести настройки можно, создав сценарий конфигурации ipv4:
Код:

netsh interface ip dump > dump.txt
И запустить его:
Код:

netsh exec -f dump.txt
Не знаю, как это будет выглядеть на разных машинах

Цитата:

Цитата mariolast
Аесли надо в текстовый файл писать? »

Код:

@echo off
setlocal

set "wmic=wmic nicconfig where ipenabled='true' get DefaultIPGateway,IPAddress,IPSubnet /value"
for /f %%i in (' "%wmic%" ') do 1>nul set "%%i"

1>file.txt (

    for /f "tokens=1 delims={}," %%i in ("%DefaultIPGateway%") do echo gateway: %%~i
    for /f "tokens=1 delims={}," %%i in ("%IPAddress%") do echo ipaddress: %%~i
    for /f "tokens=1 delims={}," %%i in ("%IPSubnet%") do echo ipsubnet: %%~i

)


eXtremer 31-03-2017 11:12 2724622

Добрый день всем, возвращаюсь к давней проблеме.
Код ниже работает отлично на все англоязычные всерий Windows. А вот с на руских через раз или вовсе не работает. Что можно изминить чтобы кода рабтол на все версий ОС не важно какой язык?
Проблема в том что код работает на половину, он создает подключение но маршрут не может добавить, не понимает команду: @route add 172.23.250.250 mask 255.255.255.255 %GetIp%
Помогите разобратся.

*В 99% из случай я добавляю этот код на машинах с Windows XP.

Код:

@rasdial VPN User Pass
@setlocal
@for /f "tokens=1-2 delims=:" %%i in ('ipconfig ^| find "IP" ^| find "172.23"') do set GETIP=%%j
@route add 172.23.250.250 mask 255.255.255.255 %GetIp%
@endlocal
@exit 0



Время: 11:36.

Время: 11:36.
© OSzone.net 2001-