【问题标题】:Evil proxy for testing client/server interaction用于测试客户端/服务器交互的邪恶代理
【发布时间】:2012-04-14 15:08:50
【问题描述】:

我正在编写一个通过 HTTP 与远程服务器通信的客户端。我想在客户端和服务器之间放置一个恶意代理,它会(随机?)影响网络上的流量。

我希望发生的一些事情:

  • 响应的任意延迟
  • 任意 HTTP 错误
  • 使用 TCP 很难想象这种情况,但到底是什么:截断响应(即格式错误的数据)
  • 暂时不可用(尽管这似乎很难,因为这必须在较低的网络级别完成)。
  • 预定义的自定义错误(例如:每个请求都返回一个服务错误)

基本上,我想模拟该软件的用户将在现实世界中体验的一系列网络条件,并确保客户端能够优雅地处理它们。

我怀疑(希望)类似的东西已经存在。请指出正确的方向!

谢谢

【问题讨论】:

  • IIRC 一些公司为内部测试构建了类似的模块......我不知道有任何免费或商业代理允许这么多控制......基本上你会从现有的开源代理开始并修改/根据您的需要扩展它...
  • 是的,我找到了Mallory。它支持插件,但在我投入时间学习 Python 之前,我想看看是否已经有了一些东西。
  • 我认为更好的选择是模拟网络交互类,这样你就可以很容易地在测试用例代码中描述这样的场景,否则管理这样的系统会相当困难。
  • 是的,你是对的,这将是更可取的方式。不幸的是,网络代码并没有以一种便于测试的方式构建。无论如何,我相信它非常可靠,但现实生活中的测试总比没有测试好。
  • 我为什么要重新发明轮子?

标签: macos testing networking client-server


【解决方案1】:

由于您使用的是 Mac,因此您的系统中内置了 ipfw。从终端,man ipfw 获取信息。

ipfw 管理防火墙规则,包括一组称为“Dummynet”的规则,可用于引入数据包丢失和延迟。这并不能解决您的所有顾虑,但它可以让您在网络级别影响您的流量,而无需使用额外的软件。

我发现an article on WaterRoof 似乎是一个支持 Dummynet 的 GUI ipfw 规则编辑器。可能还有其他人。

还可以查看this AFP548 article 使用 Dummynet 进行流量整形。如果您对命令行相当熟悉,那么您应该可以开始了。

请注意,Dummynet 并不为您在问题中列出的所有内容提供工具;它只允许您模拟一些网络问题,例如延迟和数据包丢失。对于涉及在 HTTP 级别更改数据的任何事情,我同意其他人的观点,即fiddler 可能是可以使用的工具。

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

【讨论】:

    【解决方案2】:

    您可以尝试fiddler - 您编写的所有内容都可以使用该工具进行模拟。它也非常适合调试应用程序和服务器之间的通信问题。在我实现 XML-RPC 时为我节省了很多工作。

    有一些很棒的扩展可以帮助你,如果你需要一些特别的东西,你甚至可以write your own

    [编辑] 由于这是mac问题,您可以尝试webscarabcharles(第二个付费)。但是你仍然可以在任何机器上运行代理——甚至是虚拟的。因此,如果您有多余的 win 许可证...

    【讨论】:

    • @EightyEight 因为我怀疑提琴手会在单声道上运行,所以我编辑了我的答案并添加了指向将在 mac 上运行的工具的链接。
    【解决方案3】:

    Fiddler1 是一个可编写脚本的流量查看器/代理。

    【讨论】:

      【解决方案4】:

      HTTP Test Tool (htt) 似乎正是您所需要的。当模拟框架不足以完成任务时,它有the ability to operate as a proxy and a reverse-proxy 专门用于测试这些案例。

      对于真正邪恶的代理,考虑将SquidMetasploit FrameworkBackTrack Linux中的一些工具结合使用。不过,这似乎有点超出了您的项目范围!

      Additional tools to consider,加上one more

      【讨论】:

        猜你喜欢
        • 2019-10-14
        • 1970-01-01
        • 2015-12-25
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多