恶意代理用于测试客户端/服务器交互

9
我正在编写一个客户端,通过HTTP与远程服务器通信。我想在客户端和服务器之间放置一个恶意代理,以(随机)影响传输的流量。
以下是我希望发生的一些事情:
- 响应任意延迟 - 任意的HTTP错误 - 这种情况很难想象TCP会出现,但是无所谓:截断的响应(即格式错误的数据) - 暂时不可用(虽然这似乎很难,因为这必须在较低的网络层面上完成)。 - 预定义的自定义错误(例如:每个请求都返回服务错误)
基本上,我想模拟用户在真实世界中可能遇到的各种网络条件,并确保客户端能够优雅地处理它们。
我怀疑(希望)已经有类似的东西存在。请指点我正确的方向!
谢谢

如果我没记错的话,一些公司为内部测试构建了类似的模块... 我不知道是否有任何免费或商业代理允许如此多的控制... 基本上,您可以从现有的开源代理开始,并根据您的需求进行修改/扩展... - Yahia
是的,我发现了Mallory。它支持插件,但在投入时间学习Python之前,我想先看看是否已经有类似的工具可用。 - EightyEight
1
我认为更好的选择是模拟网络交互类,这样你就可以在测试用例代码中轻松描述这些场景,否则管理这样的系统将会相当困难。 - kan
是的,你说得对,那将是更可取的方式。不幸的是,网络代码的架构并没有为测试提供便利。我相信它非常稳定,但实际测试比没有测试要好。 - EightyEight
在像Perl或Python这样的脚本语言中编写类似代理的程序非常简单 - 正如Yahia所说,这通常是用于测试的内部操作。 - jimw
1
为什么我要重新发明轮子呢? - EightyEight
4个回答

5

3

Fiddler是一个可编写脚本的流量查看器/代理工具。1


3
您可以尝试使用 fiddler 工具来模拟您所写的一切。此工具也非常适合调试应用程序与服务器之间的通讯问题。在我实现 XML-RPC 时,这个工具为我节省了很多工作。
还有一些很棒的扩展工具可以帮助您,甚至可以自己编写需要的特殊工具。
[编辑] 由于这是一个关于 Mac 的问题,您可以尝试使用 webscarab 或者charles(后者需要付费)。但是您仍然可以在任何计算机上运行代理工具,甚至虚拟机上也可以。因此如果您有闲置的 Windows 许可证...

@EightyEight,我怀疑Fiddler无法在Mono上运行,因此我编辑了我的答案并添加了可以在Mac上运行的工具链接。 - SiliconMind

2

由于您使用的是Mac系统,您的系统内置了ipfw。通过终端,输入man ipfw以获取信息。

ipfw管理防火墙规则,其中包括一组名为“Dummynet”的规则,可用于引入数据包丢失和延迟。尽管它并不能解决您所提出的所有问题,但它可以让您在网络层面上影响到您的流量,而不涉及额外的软件。

我找到了一个关于WaterRoof的文章,它似乎是支持Dummynet的GUI ipfw规则编辑器。可能还有其他类似的工具。

另外,看一下AFP548关于使用Dummynet进行流量整形的文章。如果您对命令行比较熟悉,应该可以操作。

请注意,Dummynet并不能提供您在问题中列出的所有工具;它只能让您模拟一些网络问题,如延迟和数据包丢失。对于任何涉及HTTP级别数据更改的事情,我同意其他人的看法,fiddler可能是最好的工具。

还要了解Chrome/Chromium的“检查元素”工具。(右键单击,然后从大多数上下文菜单底部选择它。)它提供了HTTP客户端和服务器标头的详细信息,以及修改隐藏表单变量、记录整个会话以供稍后查看等功能。非常方便。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接