Войти

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


Страниц : 1 [2] 3

neth1
09-04-2017, 19:31
for /F "tokens=2 delims=:" %a in ('netsh inte
rface ip show addresses name="Подключение по локальной сети"|find "Основной шлюз
"') do set "shl=%a"

C:\Documents and Settings\COMP_NAME>echo =
=

C:\Documents and Settings\COMP_NAME>pause
Для продолжения нажмите любую клавишу . . .

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



Имя компьютера . . . . . . . . . : name

Основной DNS-суффикс . . . . . . :

Тип узла. . . . . . . . . . . . . : неизвестный

IP-маршрутизация включена . . . . : нет

WINS-прокси включен . . . . . . . : нет



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



DNS-суффикс этого подключения . . :

Описание . . . . . . . . . . . . : TAP-Win32 Adapter V9

Физический адрес. . . . . . . . . : здесь_мак

Dhcp включен. . . . . . . . . . . : да

Автонастройка включена . . . . . : да

IP-адрес . . . . . . . . . . . . : здесь_ип

Маска подсети . . . . . . . . . . : здесь_маска_подсети

Основной шлюз . . . . . . . . . . : здесь_основной_шлюз

DHCP-сервер . . . . . . . . . . . : здесь_DHCP-сервер

DNS-серверы . . . . . . . . . . . : здесь_DNS-серверы

NetBIOS через TCP/IP. . . . . . . : отключен

Аренда получена . . . . . . . . . : 9 апреля 2017 г. 16:11:48

Аренда истекает . . . . . . . . . : 9 апреля 2018 г. 16:11:48



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



DNS-суффикс этого подключения . . :

Описание . . . . . . . . . . . . : LAN

Физический адрес. . . . . . . . . : здесь_мак

Dhcp включен. . . . . . . . . . . : да

Автонастройка включена . . . . . : да

IP-адрес . . . . . . . . . . . . : здесь_ип

Маска подсети . . . . . . . . . . : здесь_маска_подсети

Основной шлюз . . . . . . . . . . : здесь_основной_шлюз

DHCP-сервер . . . . . . . . . . . : здесь_DHCP-сервер

DNS-серверы . . . . . . . . . . . : здесь_DNS-серверы

NetBIOS через TCP/IP. . . . . . . : отключен

Аренда получена . . . . . . . . . : 9 апреля 2017 г. 16:11:48

Аренда истекает . . . . . . . . . : 10 апреля 2017 г. 16:11:48

NickM
09-04-2017, 20:55
так ведь у ТС WinXp, а там с netsh не все так хорошо...

alpap
10-04-2017, 01:28
neth1, код точно сохранен в кодировке 866? Также код из п15 должен работать в кодировке 866.
а каков вывод команды: netsh interface ip show addresses name="Подключение по локальной сети"

neth1
10-04-2017, 11:51
Кодировка 866.
Команда interface ip show addresses "name=Подключение по локальной сети" не найд
ена.
Странно, что это не работает. "show addresses" присутствует в help'е к netsh. Другие show отрабатывают нормально.

alpap
10-04-2017, 15:56
ну, а это? Там без netsh, wmic идет в поставке XP, если не почикано
Также код из п15 должен работать в кодировке 866 »

Команда interface »
кстати так здесь, записано или именно так и запускалась, если да, пропущено netsh вначале строки

neth1
10-04-2017, 22:10
Запускалось именно
netsh interface ip show addresses name="Подключение по локальной сети"
Ошибка
Команда interface ip show addresses "name=Подключение по локальной сети" не найд
ена.
Запускал в консоли netsh и делал пошагово:
netsh>interface>ip>show addresses name="Подключение по локальной сети"
Результат не изменился.
netsh interface ip>show config name="Подключение по локальной сети"
работает.
@echo off
set "na="& set "shl="
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^(NetConnectionStatus^="2"^) get NetConnectionID /value^|find "="') do if not defined na set "na=%%a"
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
pause
Не работает
Не удается получить доступ к файлу C:\Documents and Settings\comp_name\+

alpap
11-04-2017, 01:53
эта команда выдает список адаптеров?

wmic path Win32_networkadapter get name

alpap
11-04-2017, 11:08
иначе в вашем случае только так, без выбора, сугубо по имени и разбирая ipconfig:

@echo off
set "na=Подключение по локальной сети"
set "shl="
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
pause

не забываем - кодировка 866!

neth1
11-04-2017, 11:34
wmic path Win32_networkadapter get name »
Выдает. Все адаптеры, включая отключенные.
@echo off set "na=Подключение по локальной сети" set "shl=" for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a" for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a" echo %shl: =% pause »
Не удается получить доступ к файлу C:\Documents and Settings\comp_name\+
=
Для продолжения нажмите любую клавишу . . .

alpap
11-04-2017, 12:03
neth1,
покажите скриншот окна после выполнения кода:

@echo on
set "na=Подключение по локальной сети"
set "shl="
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
pause

и скриншот этого же кода, записанного в bat файл в открытом виде файла, естественно

neth1
11-04-2017, 20:00
Все, я понял. Не стоило использовать notepad++.
Не знаю, что с ним не так. Если редактировать в блокноте, работает.

alpap
12-04-2017, 00:10
neth1,
чего, notepad++ неплохой редактор, но я лично пользуюсь AkelPad и кстати не только для удобства в настройках надо выставить перенос по строкам, возможно и к notepad++ это относится, ну и нужных плагинов включить для удобства, например подсветка кода в AkelPad мне очень нравиться, причем можно самому допилить что я успешно и сделал.

mwz
12-04-2017, 00:41
не только для удобства в настройках »

В нём и сохранять в разных кодировках можно (например, в 866, как нужно здесь).

neth1
12-04-2017, 00:59
Я не знаю в чем проблема с notepad++. Сохранял в 866.
Теперь проблема с использованием полученного адреса шлюза.
Как записать %shl: =% в "route add"?
Безрезультатно погуглил и поэксперементировал с кавычками, все время выдает "неверный адрес шлюза".

alpap
12-04-2017, 03:46
Как записать %shl: =% в "route add" »
в "route add" это куда, вы хоть поясняйте прозрачно, вставить в какой-то код?
"неверный адрес шлюза" »
а в каком случае верный? Если ручками прописывать - не ругается?

neth1
12-04-2017, 06:52
Вот так вырисовывается:
@echo off
set "na=openvpn"
set "shl="
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
set "na=ethernet"
set "shl="
for /f "delims=[]" %%b in ('ipconfig /all^|find /n "%nb%"') do set "ns=%%b"
for /f "tokens=2 delims=:" %%b in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shb=%%b"
echo %shb: =%
route delete 0.0.0.0 mask 0.0.0.0
route add -p %shb: =% mask 255.255.255.255 %shl: =%
route add 0.0.0.0 mask 0.0.0.0 %shl: =%
pause
Если адреса шлюзов вводить ручками, все работает.

mwz
12-04-2017, 10:18
set "na=openvpn"
set "shl=" »

REM Присвоить переменной na значение openvpn
set na=openvpn
REM Сбросить (удалить) переменную shl
set shl=(без кавычек; после знака равенства — ничего).

echo %shb: =%
..
route add -p %shb: =% mask 255.255.255.255 %shl: =%»

REM Вывести переменную shb с её значением
REM (после имени переменной — ничего)
set shb
REM Но можно и в форме
REM echo %shb%
REM — т.е. только её значение
REM
REM Добавить постоянный маршрут с использованием значений двух переменных
route add -p %shb% mask 255.255.255.255 %shl%

Ну и ещё есть минимум одна строка с неправильной (тот же принцип) работой с переменными.

Iska
12-04-2017, 10:33
mwz, а что не так с кавычками в set?

mwz
12-04-2017, 10:53
а что не так с кавычками в set? »
Да вроде не по феншую... И при команде "Help set" в Win-7 не показывает возможности использования кавычек — т.е. не документировано.
Но может и отстал от жизни.

PS
А, увидел:

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

neth1
12-04-2017, 13:07
Рабочий вариант скрипта:
set na=openvpn
set shl=
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
set na=ethernet
set vhb=
for /f "delims=[]" %%b in ('ipconfig /all^|find /n "%nb%"') do set "nv=%%b"
for /f "tokens=2 delims=:" %%b in ('ipconfig /all^|more +%nv%^|find "Основной шлюз"') do if not defined shl set "vhb=%%b"
echo %vhb: =%
route delete 0.0.0.0 mask 0.0.0.0
route add -p %vhb% mask 255.255.255.255 %shl%
route add 0.0.0.0 mask 0.0.0.0 %shl%
pause
Траффик не будет идти напрямую в случае дисконнекта openvpn.
Спасибо всем за помощь.




© OSzone.net 2001-2012