Целимся в одно приложение, а не в машину
Без цели затрагивается каждое соединение на компьютере, включая удалённый рабочий стол, которым вы пользуетесь, и загрузку исправления. С целью плохую сеть получает один процесс, а всё остальное продолжает работать.
По процессу
Введите имя в Process или передайте --target. Простое имя совпадает как фрагмент, поэтому chrome охватывает chrome.exe:
BeanNetworkTester.exe --loss 10 --target chrome.exe
Он идёт по дереву процессов, что важно для всего, что порождает дочерние процессы: браузер открывает по процессу на вкладку, и они тоже попадают под удар.
Поле принимает не одно имя и не один вид значений сразу:
| Что вы вводите | Что это значит |
|---|---|
chrome.exe,firefox.exe | Два приложения. |
chrome,!chromedriver | Chrome, но никогда не драйвер. Исключения главнее. |
my*.exe | Всё, что начинается на «my». |
re:^node\.exe$ | Регулярное выражение, когда подстановочных знаков мало. |
4812 | Один идентификатор процесса. |
>1000 | Все идентификаторы процессов больше 1000. |
По адресу или порту
Иногда интересна не программа, а один сервер. Эти параметры принимают тот же синтаксис списков, диапазонов и исключений и понимают CIDR и IPv6:
BeanNetworkTester.exe --latency 300 --dst-ip 10.0.0.0/24 --dst-port 443
BeanNetworkTester.exe --loss 20 --dst-port "!53"
Второй пример стоит запомнить: всё, кроме DNS. Целиться в обход порта часто проще, чем перечислять нужные.
Нацеливание на процесс по имени переживает его перезапуск
Перезапустите приложение, пока идёт сеанс, и цель по имени снова подхватит новый процесс. Цель по идентификатору процесса этого не сможет: идентификатор принадлежал завершившемуся процессу. Другая программа, которой Windows позже выдаст тот же идентификатор, тоже не затрагивается. Если ваш тест перезапускает проверяемый объект, нацеливайтесь по имени.
Предупреждение, которое нельзя игнорировать
Запустите с включёнными помехами, без цели и без ограничения по времени, и окно и командная строка скажут об этом: это затрагивает каждое соединение на этой машине. Это предупреждение, а не отказ: иногда именно этого вы и хотите. Если нет, задайте цель или --duration, а STOP всегда всё вернёт на место.