Имитация проблемы сети для конкретного приложения

2

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

Я пытаюсь смоделировать ситуацию, когда сетевое соединение закрывается из-за сетевой проблемы или ошибки, чтобы проверить поведение, которое я реализовал в одном из моих приложений. Я мог бы просто отключить сетевой кабель или закрыть сетевой интерфейс, но я сделал свое приложение для повторного подключения сразу после этого, так что это займет слишком много времени, пока сеть снова не будет работать (из-за согласования DHCP и т. Д.).

Есть ли способ, в Unix или OS X, просто отключить определенное приложение от Интернета, а затем позволить ему немедленно восстановить соединение? Может быть, имитировать ошибку «сброс соединения по одноранговым сетям» или что-то в этом роде (я не профессионал, когда речь идет о работе в сети, извините за мой язык новичка).

Спасибо.

ov1d1u
источник
2
Многие брандмауэры могут отключить использование определенных приложений в сети ... Вы пробовали их? Linux / Mac не моя сильная сторона, но я знаю, что вы можете сделать это в Windows, поэтому я уверен, что это можно сделать в них. Кроме того, это можно легко сделать на виртуальной машине.
Keltari

Ответы:

0

Различные способы сделать это, но самый простой, который приходит мне в голову - это использовать ifconfig (ipconfig для windows). Синтаксис будет несколько отличаться, но

ifconfig eth0 down

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

Или вы можете очистить кэш arp (см. Man arp), а затем использовать другой хост (реальный или виртуальный), подменяющий MAC этой машины.

Существует пакетный вызов hping (я думаю, что в версии 3), который может симулировать различные виды пакетов. Вы можете использовать это для установки пакетов сброса от места назначения до хоста, на котором запущено приложение.

Таким образом, вы можете поместить это в сценарий

ifconfig eth0 down
sleep 5
ifconfig eth0 up

Если у вас есть сервер в вашей сети, вы можете отключить процесс на сервере. Например. остановите сервер httpd, если ваше приложение является веб-приложением.

Более ранний плакат о работе с брандмауэром на машине, которую должны пересылать пакеты вашего приложения.

Также ищите инъекционные атаки и атаки типа «отказ в обслуживании».

Если на сервере или промежуточном хосте работает linux, вы запускаете pf на этом хосте. Загружая и выгружая данное правило, вы можете открывать или закрывать данную комбинацию порт / протокол / ip. Вы также можете регулировать скорость соединения, пропуская столько пакетов в секунду.

Sherwood Botsford
источник