← Назад к вопросам

Как сымитировать ситуацию с помощью снифер трафика, когда не отвечает сервер

2.2 Middle🔥 121 комментариев
#Инструменты тестирования#Тестирование API

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как сымитировать неотвечающий сервер с помощью сниффера трафика

Чтобы сымитировать ситуацию, когда сервер не отвечает, можно использовать сниферы трафика (например, Wireshark, tcpdump, Fiddler, Charles Proxy) или более специализированные инструменты для управления и модификации трафика. Цель — перехватить запросы к целевому серверу и либо заблокировать их, либо не отправлять ответ, либо сильно задержать ответ, чтобы смоделировать отказ сервера.

Основные методы симуляции

1. Блокировка запросов на уровне снифера

Настроить фильтр в снифере, чтобы перехватывать запросы к определённому домену или IP-адресу и не пропускать их дальше. Например, в Fiddler или Charles можно использовать функцию Breakpoints (точки останова), чтобы остановить запрос и не отправлять его на сервер.

  • В Fiddler: Правила Rules > Automatic Breakpoints > Before Requests для конкретного URL.
  • В Charles: Меню Proxy > Breakpoints, добавить URL и снять флажок "Send Request".

2. Использование прокси-сервера с возможностью задержки или сброса соединения

Настроить локальный прокси (например, mitmproxy или Burp Suite) для модификации трафика. Например, можно написать скрипт, который будет сбрасывать TCP-соединение при запросе к определённому серверу, имитируя Connection refused или таймаут.

  • В mitmproxy можно использовать Python-скрипт:
    from mitmproxy import http
    
    def request(flow: http.HTTPFlow) -> None:
        if "target-server.com" in flow.request.pretty_host:
            # Имитируем сброс соединения
            flow.response = http.Response.make(500, b"Server not responding", {"Content-Type": "text/plain"})
            # Или просто не отправляем запрос дальше, оставляя клиент в ожидании
            flow.kill()  # Прерываем соединение
    
  • В Burp Suite: Использовать Project options > TLS > Client SSL certificates или Proxy > Intercept для блокировки, но для сброса лучше использовать расширения.

3. Модификация сетевых настроек на уровне ОС

Для более низкоуровневой симуляции можно использовать инструменты вроде iptables (Linux) или pf (macOS) для блокировки трафика к серверу. Например, с помощью iptables можно отбросить пакеты к определённому порту:

# Блокировать все исходящие пакеты к IP-адресу 192.168.1.100 на порту 80
sudo iptables -A OUTPUT -d 192.168.1.100 -p tcp --dport 80 -j DROP

Это приведёт к таймауту соединения на стороне клиента, так как пакеты не будут доходить до сервера.

4. Использование специализированных инструментов для сетевой эмуляции

Инструменты, такие как Clumsy (Windows) или Network Link Conditioner (macOS), позволяют имитировать сетевые проблемы, включая потерю пакетов, задержки и разрывы соединений. Например, в Clumsy можно настроить правило для обрыва всех соединений к определённому порту.

  • Пример настройки в Clumsy: Выбрать фильтр по IP/порту и применить действие Drop или Lag.

5. Симуляция через моки в коде приложения

Хотя это не снифер, но для полноты картины: в тестовой среде можно подменить реальный сервер на мок-сервер (например, с помощью WireMock, MockServer), который будет возвращать ошибки или не отвечать. Это полезно для интеграционных тестов.

Практический пример с Wireshark и tcpdump

Wireshark в основном для анализа, но можно комбинировать с другими инструментами. Например, использовать tcpdump для захвата трафика, а затем tc (traffic control в Linux) для имитации проблем:

# Задержка всех пакетов к серверу на 10 секунд (имитация таймаута)
tc qdisc add dev eth0 root netem delay 10s
# Или полностью заблокировать трафик
tc qdisc add dev eth0 root netem loss 100%

После этого tcpdump покажет, что пакеты уходят, но ответы не приходят.

Рекомендации для QA-инженера

  • Контекст использования: Выберите метод в зависимости от цели тестирования (например, для проверки устойчивости приложения к сбоям сети используйте iptables или Clumsy; для отладки HTTP-запросов — Fiddler/Charles).
  • Безопасность: При блокировке трафика убедитесь, что не нарушаете работу критических систем (например, лишние iptables-правила могут заблокировать весь трафик).
  • Автоматизация: Для нагрузочного тестирования используйте инструменты вроде JMeter с настройкой таймаутов или Toxiproxy для программируемого управления прокси.

Такой подход позволяет тщательно протестировать поведение приложения при недоступности сервера, включая обработку ошибок, таймауты и восстановление после сбоя.