这在某种程度上是一个开发人员的问题,但由于它与操作系统和网络连接更相关,因此我将在这里发布它,而不是在 Stack Overflow 上发布。
我正在尝试模拟网络连接由于网络问题或错误而关闭的情况,以测试我在我的某个应用程序中实现的行为。我可以简单地断开网线或关闭网络接口,但我让我的应用程序在此之后立即重新连接,因此这样做会花费很长时间才能让网络再次启动(因为 DHCP 协商等)。
在 Unix 或 OS X 中,是否有任何方法可以断开特定应用程序与互联网的连接,然后让其立即重新连接?也许可以模拟“对等方重置连接”错误或其他错误(在网络方面我不是专业人士,因此抱歉我的语言是新手)。
谢谢。
答案1
有多种方法可以做到这一点,但对我来说最简单的方法是使用 ifconfig(Windows 上的 ipconfig)语法会略有不同,但是
ifconfig eth0 down
您可以通过删除到应用程序服务器的路由来对路由执行类似的事情。
或者您可以清除 arp 缓存(参见 man arp),然后让另一台主机(真实或虚拟)欺骗该机器的 MAC。
有一个名为 hping 的软件包(我认为现在是版本 3)可以模拟各种类型的数据包。您可以使用它将重置数据包从目标设置回运行应用程序的主机。
所以你可以把它放在脚本里
ifconfig eth0 down
sleep 5
ifconfig eth0 up
如果您的网络上有服务器,您可以关闭服务器上的进程。例如,如果您的应用程序是 Web 应用程序,请停止 httpd 服务器。
早先的海报是关于在应用程序数据包必须传输的机器上使用防火墙的。
还要查找注入攻击和拒绝服务攻击。
如果服务器或中间主机运行 Linux,您可以在该主机上运行 pf。通过加载和卸载给定的规则,您可以打开或关闭给定的端口/协议/IP 组合。您还可以限制连接,每秒仅允许一定数量的数据包。