2012-03-30 4 views
9

Я пишу клиента, который разговаривает с удаленным сервером через HTTP. Я хотел бы поместить злой прокси между клиентом и сервером, который (случайно?) Повлияет на трафик на проводе.Evil proxy для тестирования взаимодействия клиент/сервер

Некоторых вещей, которые я хотел бы случиться:

  • произвольных задержек для ответа
  • произвольных ошибок HTTP
  • этого сценарий трудно представить с TCP, но какой черт: усеченные ответов (т.е. неверные данные)
  • Временная недоступность (хотя это кажется трудным, учитывая, что это нужно делать на более низком уровне сети).
  • предопределенные пользовательские ошибки (например: каждый запрос возвращается с ошибкой службы)

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

Я подозреваю (надеюсь), что что-то подобное уже существует. Пожалуйста, указывайте мне в правильном направлении!

Благодаря

+0

IIRC некоторые компании построили аналогичные модули для внутреннего тестирования ... Я не знаю ни о каком свободном или коммерческом прокси-сервере, позволяющем использовать этот большой контроль ... в основном вы начинаете с существующего прокси-сервера opensource и модифицируете/расширяете его для своих нужд ... – Yahia

+0

Да, я нашел [Мэллори] (http://intrepidusgroup.com/insight/mallory/). Он поддерживает плагины, но я хочу посмотреть, есть ли что-то там, прежде чем я инвестирую время в изучение Python. – EightyEight

+1

Я думаю, что лучший выбор состоит в том, чтобы высмеять классы сетевого взаимодействия, поэтому вы можете легко описать такие сценарии в коде тестового кода, иначе было бы довольно сложно управлять такой системой. – kan

ответ

5

HTTP Test Tool (htt) кажется, что вам нужно здесь. Он имеет the ability to operate as a proxy and a reverse-proxy для проверки этих случаев конкретно, когда макетная структура недостаточна для задачи.

Для злого прокси действительно, рассмотреть возможность использования Squid в сочетании с Metasploit Framework и некоторые из инструментов в BackTrack Linux. Хотя это, похоже, немного превышает рамки вашего проекта!

(Additional tools to consider, плюс one more)

3

Скрипач 1 является зритель сценариев трафика/прокси.

3

Вы можете попробовать fiddler - все, что вы написали, можно моделировать с помощью этого инструмента. Это также отлично подходит для отладки коммуникационных проблем между вашим приложением и сервером. Сэкономил мне много работы, когда я реализовал XML-RPC.

Есть несколько отличных расширений, которые могут вам помочь, и вы можете даже write your own, если вам нужно что-то действительно особенное.

[EDIT] Поскольку этот вопрос является mac, вы можете попробовать webscarab или charles (второй оплачивается). Но вы все равно можете запустить прокси-сервер на любой машине - даже виртуальной. Поэтому, если у вас есть запасная лицензия на выигрыш ...

+0

К сожалению, я нахожусь на mac. – EightyEight

+0

@EightyEight, поскольку я сомневаюсь, что скрипач будет работать на моно, я отредактировал свой ответ и добавил ссылки на инструменты, которые будут работать на Mac. – SiliconMind

2

Поскольку вы находитесь на Mac, у вас есть ipfw, встроенный в вашу систему. От терминала, man ipfw для информации.

ipfw управляет правилами брандмауэра, включая набор правил, называемых «Dummynet», которые могут использоваться для ввода потери пакетов и задержки. Это не затрагивает ВСЕ ваши проблемы, но позволяет вам влиять на ваш трафик на сетевом уровне без привлечения дополнительного программного обеспечения.

Я нашел an article on WaterRoof который выглядит как редактор правил GUI ipfw, который поддерживает Dummynet. Возможно, есть и другие.

Также взгляните на this AFP548 article на формирование трафика с Dummynet. Если вы достаточно удобны в командной строке, вам должно быть хорошо идти.

Обратите внимание, что Dummynet НЕ предоставляет инструменты для всех вещей, перечисленных в вашем вопросе; он позволяет вам моделировать ряд сетевых проблем, таких как латентность и потеря пакетов. Для чего-либо, связанного с изменением данных на уровне HTTP, я согласен с другими, что fiddler, вероятно, является инструментом для использования.

Также узнайте об инструменте «Осмотрите элемент» Chrome/Chromium. (Щелкните правой кнопкой мыши, а затем выберите его в нижней части большинства контекстных меню.) Он обеспечивает подробный просмотр заголовков HTTP и клиентов HTTP, а также возможность изменять скрытые переменные формы, записывать целые сессии для последующего просмотра и т. Д. Очень удобно вещи.

+0

Это замечательно, спасибо! – EightyEight

Смежные вопросы