Войти

Показать полную графическую версию : узнать какой IP будет у шлюза перед тем как создать маршрут


eXtremer
12-03-2015, 10:28
У меня есть пользователи который до сих пор используют 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
А ХР локализованная? Попробуйте вместо find "IP Address" find "IP"

eXtremer
12-03-2015, 12:18
А ХР локализованная? Попробуйте вместо 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
Скрипт видимо работает только с 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%
@endlocalD:\>VPN2.bat
Установка связи с VPN...
Проверка имени и пароля пользователя...
Регистрация компьютера в сети...
Установлена связь с VPN.
Команда успешно завершена.
IP address:

D:\>

Foreigner
12-03-2015, 21:36
eXtremer, Выложи вывод ipconfig

eXtremer
12-03-2015, 21:44
Тот же самый код на 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
eXtremer, Попробуйте так:

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

eXtremer
12-03-2015, 21:57
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
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
@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
Я только что поднял образ "Windows XP Professional SP3 x86 RU VL" на VMware всё работает отлично. Как я говорил, наверное система с которой я работал вчера не работало правельно. Уже походу дело когда буду поднимать VPN на компы клиентов посмотрю что получется. Спасибо.

mariolast
03-04-2015, 00:01
Есть такой батник

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
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
Аесли надо в текстовый файл писать?
Задача стоит в следующем.
Создать в текущем каталоге готовый 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
mariolast, Перенести настройки можно, создав сценарий конфигурации ipv4:

netsh interface ip dump > dump.txt

И запустить его:

netsh exec -f dump.txt

Не знаю, как это будет выглядеть на разных машинах

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

@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
Добрый день всем, возвращаюсь к давней проблеме.
Код ниже работает отлично на все англоязычные всерий 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




© OSzone.net 2001-2012