1 (изменено: batofl, 2017-02-27 09:10:13)

Тема: CMD/BAT: Компьютeр в сeти, до которого самый длинный маршрут

Как вывести максимальное значение метрики(последняя колонка из вывода команды route print)? Файл - .bat.

То eсть нужно опрeдeлить компьютeр в сeти, до которого самый длинный маршрут.
Буду благодарен за помощь. Если кто-то осилит, буду очень признателен.

Скрин:
http://freshall.com/img/2017-02/27/qmnsvs7q3d2so6a41dh5hs54b.png

2

Re: CMD/BAT: Компьютeр в сeти, до которого самый длинный маршрут

Префикс языка добавлен в заголовок.
Прошу ознакомиться целиком с правилами оформления и больше не нарушать.

for /f "eol== tokens=5" %%i in ('route print ^|findstr /rc:"[0-9]$"') do if %m% LSS %%i set m=%%i
echo %m%

3 (изменено: batofl, 2017-02-27 16:06:23)

Re: CMD/BAT: Компьютeр в сeти, до которого самый длинный маршрут

Flasher, спасибо большое за отклик, а не могли бы вы отредактировать немного код, чтобы выводило еще и соответствующий маршруту адрес компьютера? И у меня почему-то выводит 281, хотя максимальный 286 и есть 306.


Flasher: Правила что-то плохо прочли:

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

4

Re: CMD/BAT: Компьютeр в сeти, до которого самый длинный маршрут

batofl
У меня получается из cmd:

for /f "eol== tokens=4,5" %i in ('route print ^|findstr /rc:"[0-9]$"') do if "%j" neq "" (if %j GTR %m% set m=%j&&set ip=%i)

Далее: echo %ip% %m%
А из батника по идее так:

@echo off
for /f "eol== tokens=4,5" %%i in ('route print ^|findstr /rc:"^[0-9]*$"') do (
  if "%%j" NEQ "" (
    if %%j GTR %m% (
      set ip=%%i
      set m=%%j
    )
  )
)
echo %ip% %m%

Но ...

5

Re: CMD/BAT: Компьютeр в сeти, до которого самый длинный маршрут

Flasher пишет:

Но ...

Но что? И по вашему мнению, это вообще правильный способ опрeдeлять компьютeр в сeти, до которого самый длинный маршрут?

6 (изменено: UNDYING, 2017-03-01 19:16:18)

Re: CMD/BAT: Компьютeр в сeти, до которого самый длинный маршрут

batofl пишет:

правильный способ опрeдeлять компьютeр в сeти, до которого самый длинный маршрут

Интересный вопрос.
Метрика:

Метрика - числовое значение, влияющее на выбор маршрута в компьютерных сетях. В случае статической маршрутизации это значение обычно не изменяется в пределах сессии.

Иными словами это число переходов (скачков) до места назначения.

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

Значение параметра метрики определяет приоритет, который назначается маршруту, связанному с определенным интерфейсом.

Чем меньше число метрики, тем выше приоритет.

Но описание немного лукавит, метрика 25 (или 25 "хопов") до маршрутизатора своей "локалки" звучит как оксюморон.
Более-менее точную информацию покажет netsh (проверял на Windows 7 Pro SP1 x64):

C:\> netsh interface ipv4 show route

Публикация  Тип      Мет  Префикс                    Инд  Имя шлюза/интерфейса    
-------  --------  ---  ------------------------  ---  ------------------------   
Нет      Вручную   1    0.0.0.0/0                  16  192.168.0.1                
Нет      Вручную   0    0.0.0.0/0                  11  192.168.0.1                
Нет      Вручную   1    10.0.0.0/24             11  192.168.0.2              
Нет      Вручную   256  127.0.0.0/8                 1  Loopback Pseudo-Interface 1
Нет      Вручную   256  127.0.0.1/32                1  Loopback Pseudo-Interface 1
Нет      Вручную   256  127.255.255.255/32          1  Loopback Pseudo-Interface 1
<...>

"Наколеночный" код (возможны косяки сортировки и работа через временный файл мне не оч. нравится):

(for /f "tokens=3" %%a in ('netsh interface ipv4 show route ^| more +3') do echo %%a) > 123.txt
for /f "tokens=2 delims=]"  %%a in ('type 123.txt ^| sort /r ^| find "" /v /n ^| findstr "\[1\]"') do (echo %%a)
del 123.txt

Немного поправленный код (убрана метрика -1 [256]):

(for /f "tokens=3" %%a in ('netsh interface ipv4 show route ^| more +3') do echo %%a) > 123.txt
for /f "tokens=2 delims=]"  %%a in ('type 123.txt ^| sort /r ^| find "256" /v ^| find "" /v /n ^| findstr "\[1\]"') do (echo %%a)
del 123.txt

На моём ПК покажет длину маршрута 1 (в ПК 2 сетёвки, один маршрут до VPN-сервера, до которого 1 прыжок, т.к. он в локалке, и один маршрут до тестовой сетки) - маршрут до тестовой сетки.