Есть ли способ вывести шлюз для определенного маршрута (не интерфейса) в Windows (в данном случае Win7)? Мне нужно будет динамически добавить маршрут в скрипт OpenVPN _up, но поскольку шлюз назначается динамически при формировании соединения, я не могу написать его статически.
Похоже, что для скриптов _up потенциально доступны некоторые переменные среды (route_vpn_gateway?), но мне не удалось заставить их работать.
Полагаю, я воспользуюсь awk/grep из инструментов GnuWin и проанализирую вывод «routes», но, возможно, есть более простой/чистый способ?
решение1
Вы можете легко использовать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) Пройдитесь по массиву строк, пока не найдете строку, которую необходимо заменить, затем замените строку и сохраните файл.
Надеюсь, это укажет вам правильное направление.