Есть ли способ распечатать шлюз для определенного маршрута (не интерфейса) в Windows (в данном случае Win7)? Мне нужно было бы динамически добавить маршрут в сценарии OpenVPN _up, но поскольку шлюз динамически назначается при формировании соединения, я не могу написать его статически.

Также, возможно, существуют переменные окружения (route_vpn_gateway?) доступны для сценариев _up, но мне не удалось заставить их работать.

Я полагаю, что могу использовать awk/grep из инструментов GnuWin и проанализировать вывод «маршрутов», но, возможно, есть более чистый / простой способ?

1 ответ1

0

Вы можете легко использовать powershell:

PS C:\Users\mmoor> $RouteTable = Get-WmiObject Win32_IP4RouteTable
PS C:\Users\mmoor> $RouteTable[0].Mask
0.0.0.0
PS C:\Users\mmoor> $RouteTable[0].Destination
0.0.0.0
PS C:\Users\mmoor> $RouteTable[0].NextHop
<Gateway Address>

Сравните это с запуском ROUTE PRINT из командной строки Windows. Powershell - это многословный язык сценариев, поэтому вы можете легко обновить конфигурационный скрипт клиента openvpn, я полагаю, это то, что вы пытаетесь сделать. Это также объектно-ориентированный.

Я бы сделал что-то следующее:

1) Захватите таблицу маршрутизации из wmi (показано выше)

2) Каждая запись таблицы маршрутизации - это одна запись в массиве (отсюда [0] после указанной выше переменной)

3) Выполните foreach для массива, пока не найдете IP-адрес, который вы ищете

4) Получить член NextHop из записи RouteTable и сохранить его

5) Прочтите файл конфигурации клиента OpenVPN (использование get-content в powershell создаст массив строк файла)

6) Перебирайте массив строк, пока не найдете строку, которую вы должны заменить, затем замените строку и сохраните файл.

Надеюсь, что это указывает вам в правильном направлении.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .