Я пытаюсь написать программу, которая меняет шлюз сети по умолчанию время от времени. Но кажется, что в таблице маршрутов в каждом процессе есть кеши, поэтому я не могу точно контролировать поведение сети. Могу ли я просто сбросить таблицу маршрутов для этого процесса?
Например, если я сначала выполнил Iexplore.exe, а затем изменил шлюз по умолчанию на корейский vpn, IE все равно перешел на шлюз по умолчанию amercia. Но если сначала изменить шлюз по умолчанию, а затем запустить Iexplore.exe, он перейдет в Корею.
Итак, как я могу очистить кеш таблицы маршрутов? Спасибо.
Из командной строки при запуске администратора:
netsh interface ip delete destinationcache
Работает на Win7.
route -f вызывает повреждение. Поэтому нам нужно либо отключить правильные части таблицы маршрутизации, либо выяснить, как ее перестроить.
-
Если у нас есть DHCP, предоставляющий правильные маршруты, тогда все в порядке. Я использовал это и повторно подключил свои проводные и беспроводные сети, и все в порядке. — Пол Стелиан, 29 окт., В 10:11
-
route -f очень опасен, если ваша виртуальная машина находится в облаке, вы потеряете весь возможный доступ, если не восстановите резервную копию. — Anass Kartit 18 ноя, в 19:50
route -f вызывает повреждение. Поэтому нам нужно либо отключить правильные части таблицы маршрутизации, либо выяснить, как ее восстановить.
Вы можете открыть командную строку и выполнить
печать маршрута
и посмотрите текущую таблицу маршрутизации.
Вы можете изменить его
route add dddd mask mmmm gggg route delete dddd mask mmmm gggg route change dddd mask mmmm gggg
Кажется, они работают
Я запускаю команду ping dddd -t, измените маршрут, и он изменится. (мой тест включал маршрутизацию на мертвый маршрут и пинг остановлен)

Вы можете открыть командную строку и выполнить
печать маршрута
и просмотрите вашу текущую таблицу маршрутизации.
Вы можете изменить ее
route add dddd mask mmmm gggg route delete dddd mask mmmm gggg route change dddd mask mmmm gggg
похоже, они работают
Я запускаю команду ping dddd -t change the route, и он меняется. (мой тест включал маршрутизацию на мертвый маршрут и пинг остановлен)
В Microsoft Windows вы можете выполнить route -f , чтобы удалить текущий шлюз, отметьте route/? для дополнительных опций, таких как добавление/удаление и т. д., а также можете написать пакет для добавления маршрута в определенное время также, но если вам нужно удалить IP-кеш, вы можете использовать команду arp .

-
7Команда route -f приводит к безвозвратной потере шлюза. Вы обязательно должны включить это в свой ответ. — mavrosxristoforos 26 мая ’14 в 8:32
В Microsoft Windows вы можете выполнить команду route -f , чтобы удалить текущий шлюз, проверьте route/? для дополнительных опций, таких как добавление/удаление и т. д., а также можете написать пакет для добавления маршрута в определенное время, но если вам нужно удалить IP-кеш, тогда у вас есть возможность использовать команду arp .
Очистить все и только постоянные (статические) маршруты в Windows
Есть ли простой способ сделать это с помощью команды/пакета оболочки? VBScript также подойдет.
Чтобы очистить все маршруты, используйте:
route -f
Чтобы очистить только постоянные маршруты, вы можете использовать
reg delete HKLM SYSTEM CurrentControlSet Services Tcpip Parameters PersistentRoutes/va/f
, но это не удалит их из текущих активных маршрутов.
-
У меня есть множество постоянных маршрутов, но я не вижу их в этом regkey. Хранятся ли они где-нибудь в наши дни (Windows 10)? — NickG 28 марта ’18, 15:00
-
@NickG: Не уверен. Вы говорите о маршрутах IPv4 или IPv6? — user1686 28 марта ’18 в 15:07
-
@ user1686
route -f
не должен запускаться удаленно. И после этого компьютер/сервер необходимо перезагрузить. — SebMa, 7 дек. ’20 в 16:16 -
@SebMa: Он очищает все маршруты, чего вы ожидали? — user1686 07 дек. ’20 в 16:19
Чтобы очистить все маршруты, используйте:
route -f
Чтобы очистить только постоянные маршруты, вы можете использовать
reg delete HKLM SYSTEM CurrentControlSet Services Tcpip Parameters PersistentRoutes/va/f
, но это не удалит их из текущие активные маршруты.
Вот cmd-скрипт, который извлекает статические маршруты из реестра и выдает команды route delete
для каждого из них.
Этот метод удаляет их как из сохраненного списка постоянных маршрутов, так и из активных в данный момент маршруты.
Он также удаляет маршрут по умолчанию, если он найден в реестре:
@echo offset key = HKLM SYSTEM CurrentControlSet Services Tcpip Parameters PersistentRoutesfor/f "tokens = 1,2,3, * delims =," %% i in ('reg query% key% ^ | find "REG_SZ"') do (route delete %% i mask% % j %% k)
Чтобы предотвратить удаление маршрута по умолчанию, вы можете ввести следующее:
@echo offset key = HKLM SYSTEM CurrentControlSet Services Tcpip Parameters PersistentRoutesfor/f "tokens = 1,2,3, * delims =," %% i in ('reg query% key% ^ | find/v "0.0.0.0, 0,0.0. 0 "^ | find" REG_SZ "') do (route delete %% i mask %% j %% k)
Вот cmd-скрипт, который извлекает статические маршруты из реестра и выдает команды route delete
для каждого из них.
Этот метод удаляет их как из сохраненного списка постоянных маршрутов, так и из текущих активных маршрутов.
Он также удаляет маршрут по умолчанию, если он найден в реестре:
@ ключ смещения эха = HKLM SYSTEM CurrentControlSet Se rvices Tcpip Parameters PersistentRoutesfor/f "tokens = 1,2,3, * delims =," %% i in ('reg query% key% ^ | find "REG_SZ" ') do (route delete %% i mask %% j %% k)
Чтобы предотвратить удаление маршрута по умолчанию, вы можете ввести следующее:
@echo offset key = HKLM SYSTEM CurrentControlSet Services Tcpip Parameters PersistentRoutesfor/f "tokens = 1,2,3, * delims =," %% i in (' reg query% key% ^ | find/v "0.0.0.0,0.0.0.0" ^ | find "REG_SZ" ') do (route delete %% i mask %% j %% k)
Это можно сделать как базовый цикл for, позволяющий вы, чтобы правильно очистить маршруты для существующих и будущих маршрутов.
(И без участия в просмотре или редактировании каких-либо элементов реестра) с помощью простой печати маршрута, переданного в поиск и зацикленного в удалении маршрута .
FOR/F "TOKENS = 1-5"% a IN ('ROUTE PRINT ^ | FIND/I/V "On-Link" ^ | FINDSTR/E/ R/C: "* . [0-9] * [0-9] * [0-9] [0-9] *" ') DO @ (IF/I "% ~ e" EQU "" (МАРШРУТ УДАЛИТЬ% a МАСКУ% b% c))
Это можно сделать как базовый цикл for, позволяющий правильно очищать маршруты для существующих и будущих маршрутов.
(И без участия в просмотре или редактировании каких-либо элементов реестра) с помощью простой печати маршрута, переданного в поиск и зацикленного в маршруте удаления.
FOR/F "TOKENS = 1-5"% a IN ('ROUTE PRINT ^ | FIND/I/V "On-Link" ^ | FINDSTR/E/R /C: "* . [0-9] * [0-9] * [0-9] [0-9] *" ') DO @ (IF/I "% ~ e" EQU "" (УДАЛЕНИЕ МАРШРУТА % a МАСКА% b% c))
Чтобы удалить все постоянные маршруты IPv4, кроме маршрута по умолчанию:
for/f "skip = 3 tokens = 4,6"% e in ('netsh int ipv4 sh route store ^ = persistent ^ | findstr -v 0.0.0.0/0 ') do route delete -4 -p% e% f
Для удаления всех постоянных маршрутов IPv6 кроме маршрута по умолчанию:
for/f "skip = 3 tokens = 4,6"% e in ('netsh int ipv6 sh route store ^ = persistent ^ | findstr - v ::/0 ') удалить маршрут -6 -p% e% f
Чтобы удалить все постоянные маршруты IPv4, кроме маршрута по умолчанию:
для/f "skip = 3 tokens = 4,6"% e in ('netsh int ipv4 sh route store ^ = persistent ^ | findstr -v 0.0.0.0/0') do route delete -4 -p% e% f
Чтобы удалить все постоянные маршруты IPv6, кроме маршрута по умолчанию:
for/f "skip = 3 tokens = 4,6"% e in ('netsh int ipv6 sh route store ^ = persistent ^ | findstr -v ::/0') do route delete -6 -p% e% f