PDA

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


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

neth1
22-03-2017, 22:45
Несколько сетевых адаптеров, настройки получают по dhcp.
Нужно брать текущий шлюз для одного из адаптеров, и использовать его дальше в скрипте.
Примерно так:
Получить шлюз для "ethernet адаптер1"
route add 0.0.0.0 mask 0.0.0.0 'шлюз для "ethernet адаптер1"'

glukin
22-03-2017, 23:21
neth1, парсить вывод вот этой команды?
netsh interface ip show route
Готового батника не предложу, извините.

neth1
22-03-2017, 23:36
'interface' в данном случае имя интерфейса?
Как его узнать?
netsh 'Подключение по локальной сети - Ethernet адаптер' ip show route
не сработало.
Команда 'Подключение по локальной сети - Ethernet адаптер' ip show route не найдена.
Где посмотреть рабочие примеры парсинга?

glukin
22-03-2017, 23:49
neth1, извиняюсь, не то написал.
Вот:
netsh interface ip show addresses
Выведет конфиг для всех интерфейсов.
netsh interface ip show addresses name="Имя_интерфейса"
Выведет конфиг для нужного.

Впрочем, то же самое выведет и ipconfig.

neth1
23-03-2017, 06:00
netsh interface ip show addresses
Команда interface ip show addresses не найдена.
А что на счет парсинга?
Не представляю, как это реализуется средствами cmd.

Iska
23-03-2017, 09:00
Команда interface ip show addresses не найдена. »
Вы бы тогда озвучили среду исполнения.

neth1
23-03-2017, 12:19
win xp.
Помогите пожалуйста спарсить шлюз из ipconfig, кто может.
Я буду очень долго разбираться.

neth1
06-04-2017, 14:58
Странно, но не работает:
@echo off
for /f "tokens=7 delims=:" %%a in ('ipconfig /all ^| findstr "шлюз.*"') do (
if not defined gateway set gateway=%%a
)
echo gateway - %gateway%

NickM
06-04-2017, 20:31
а так?
@echo off
setlocal enabledelayedexpansion
for /f "usebackq tokens=1-2 delims=:" %%i in (`ipconfig ^| find "Основной шлюз"`) do echo.%%j

neth1
06-04-2017, 22:24
Работает.
У меня несколько адаптеров, шлюз нужен только для одного.
Как из %%j выбрать нужную строку?

Iska
07-04-2017, 01:55
Откуда ж нам знать, по каким критериям Вы выбираете потребный. Озвучьте.

neth1
07-04-2017, 06:28
Можно по названию сетевого подключения или просто первый, второй или третий шлюз. Они всегда выдаются в одном порядке.
Конечно лучше по названию сетевого подключения.

alpap
07-04-2017, 15:49
по названию сетевого подключения или просто первый »

@echo off
set "na1="
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^(NetConnectionStatus^="2"^) get NetConnectionID /value^|find "="') do (
set "na=%%a"
if not defined na1 set "na1=%%a"
)
echo Первое имя сетевого подключения - %na1%
echo Последнее имя сетевого подключения - %na%
pause>nul

надеюсь разберетесь как подставить в поиск парсера

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

neth1
07-04-2017, 22:42
Проблема не в том, чтобы спарсить сетевые подключения, а в том чтобы поставить нужное в поиск парсера.
У меня слишком низкий скилл, знаю что хочу сделать, но не вижу реализацию:(

alpap
08-04-2017, 01:18
Если поизвращаться с парсингом ipconfig /all, то вывести нужный шлюз, например первого подключенного адаптера можно так:

@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

alpap
08-04-2017, 01:33
Конечно так было бы повеселее, но видимо на вашей системе netsh не работает

@echo off
for /f "tokens=2 delims=:" %%a in ('netsh interface ip show addresses name^="Имя подключения"^|find "Основной шлюз"') do set "shl=%%a"
echo %shl: =%
pause

neth1
08-04-2017, 07:17
На моей системе первый вариант также не работает:
Не удается получить доступ к файлу C:\Documents and Settings\comp_name\+
Почему может не работать netsh?
Он есть.
netsh>help

Применимы следующие команды:

Команды в этом контексте:
.. - Переход на один контекстный уровень вверх.
? - Отображение списка команд.
abort - Отмена изменений, сделанных в автономном режиме.
add - Добавление элемента конфигурации в список элементов.
alias - Добавление псевдонима.
bridge - Изменения в контексте 'netsh bridge'.
bye - Выход из программы.
commit - Применение изменений, сделанных в автономном режиме.
delete - Удаление элемента конфигурации из списка элементов.
diag - Изменения в контексте 'netsh diag'.
dump - Отображение сценария конфигурации.
exec - Запуск файла сценария.
exit - Выход из программы.
firewall - Изменения в контексте 'netsh firewall'.
help - Отображение списка команд.
interface - Изменения в контексте 'netsh interface'.
lan - Изменения в контексте 'netsh lan'.
nap - Изменения в контексте 'netsh nap'.
offline - Переход в автономный режим.
online - Переход в оперативный режим.
popd - Получение контекста из стека.
pushd - Помещение текущего контекста в стек.
quit - Выход из программы.
ras - Изменения в контексте 'netsh ras'.
routing - Изменения в контексте 'netsh routing'.
set - Обновление параметров конфигурации.
show - Отображение информации.
unalias - Удаление псевдонима.
winsock - Изменения в контексте 'netsh winsock'.

Доступны следующие дочерние контексты:
bridge diag firewall interface lan nap ras routing winsock

Конечно так было бы повеселее, но видимо на вашей системе netsh не работает
Код: Выделить весь код
@echo off
for /f "tokens=2 delims=:" %%a in ('netsh interface ip show addresses name^="Имя подключения"^|find "Основной шлюз"') do set "shl=%%a"
echo %shl: =%
pause »
Это отрабатывает, но "shl" пустая.

alpap
08-04-2017, 17:56
Имя подключения »
Во-первых сюда написать имя, например: "Подключение по локальной сети", или какое там у вас
Во-вторых, значения шлюза может и не быть на определенном адаптере

наберите в командной строке: ipconfig /all>"C:\file.txt" и посмотрите какие имена сетевых подключений, у кого есть Основной шлюз и какой у кого нет, скопируйте имя подключения для которого надо выводить значение шлюза, если оно есть как таковое, конечно

код сохраняйте в кодировке 866!

neth1
08-04-2017, 19:48
Во-первых сюда написать имя, например: "Подключение по локальной сети", или какое там у вас
Во-вторых, значения шлюза может и не быть на определенном адаптере
наберите в командной строке: ipconfig /all>"C:\file.txt" и посмотрите какие имена сетевых подключений, у кого есть Основной шлюз и какой у кого нет, скопируйте имя подключения для которого надо выводить значение шлюза, если оно есть как таковое, конечно
код сохраняйте в кодировке 866! »
Именно так все и делал.
C:\test.bat
=
Для продолжения нажмите любую клавишу . . .

alpap
09-04-2017, 01:12
Именно так все и делал »
Давайте чтобы я не ругался, показывать то что вы делали

1. Вывод этого: ipconfig /all>"C:\file.txt" (можете затереть цифры значений или изменить)
2. этот код

@echo on
for /f "tokens=2 delims=:" %%a in ('netsh interface ip show addresses name^="Имя подключения"^|find "Основной шлюз"') do set "shl=%%a"
echo %shl: =%
pause

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




© OSzone.net 2001-2012