我如何伪造丢弃的数据包(或实际上使它们失败)?

我如何伪造丢弃的数据包(或实际上使它们失败)?

背景

我们的一个客户的互联网出现了间歇性问题,当用户下载大文件时就会丢弃数据包(他们的 IT 部门正在调查此问题)。

我有一个应用程序,由运行 Windows 2008 R2 IIS7.5 的 Web 服务器和运行 Windows 7 的客户端 Chrome 组成,它使用长时间运行的 XMlHttpRequest 将“消息”从服务器传输到客户端。

问题。

我的应用程序应该对这些数据包丢失具有相当的免疫力,但实际上并非如此。

我想在各种不同的网络问题场景下测试应用程序,例如随机 1% 的数据包丢失和突发数据包丢失(比如 4000 毫秒内数据包完全丢失等等)。

我正在寻找一种解决方案,可以让我“重现”一个场景并测试我的应用程序。我可以使用 3G,或者拔掉和拔掉网线,但效果不太可重现。

问题。

是否有可以安装在我的机器上的应用程序/驱动程序来模拟“不可靠的”互联网连接?或者我可以在网络中使用设备或代理服务器来模拟这些场景?

我猜在现代计算机上做到这一点并不容易,因为我预计大部分 TCP 堆栈都会卸载到网卡上,但我本以为这是一个相当流行的尝试,然而我在谷歌上没有找到任何结果。我更擅长使用 Windows,但使用 Linux 作为客户端或代理的解决方案将受到欢迎。

答案1

中间的一个简单的 Linux 路由器可以完美地为您完成此操作。只需阅读 即可netem。您可以复制所有内容,包括丢失的数据包、重新排序的数据包、损坏的数据包,甚至延迟。我自己用它来模拟基于卫星的链接。

答案2

我使用 TMNetSim 来执行此操作。它可以代理您想要的任何端口,因此可以用于大多数应用程序。

http://www.tmurgent.com/Tools.aspx

您可能希望在客户端和服务器端执行相关数据包捕获,并确定客户端是否正在接收 RST 数据包。如果是,则它是否来自您的服务器。它是否在可预测的时间发生,例如在五分钟不活动之后。

相关内容