利用Dummynet模拟恶劣网络环境
Dummynet安装(Windows 7 32位)
Dummynet本身作为ipfw防火墙的一部分,其内建于FreeBSD,其本身支持FreeBSD,OSX,Linux,Windows多种操作系统下的安装和使用,在OSX和Linux下下载源码编译安装一般即可使用,这里主要介绍一下Windows下的Dummynet安装。
Dummynet在Windows下是作为一个网卡上的服务驱动存在的,在官方给出的二进制文件包中已经包含了该驱动的sys与inf文件,但是该驱动是没有包含数字签名的,在并没有引入驱动强制签名机制的Windows操作系统(如Windows XP)上时,直接到官网下载到最新的二进制包,然后依照之后的操作步骤进行安装即可以完成ipfw+dummynet服务驱动的安装
程序包下载地址http://info.iet.unipi.it/~luigi/dummynet/
点击Availability——source_code下载
一、关闭驱动强制签名机制,然后安装无签名的驱动
1、win+R,输入gpedit.msc
2、用户配置—系统—驱动程序安装,点击右侧的驱动程序的代码签名
3、改成已启用,警告
二、安装Dummynet
1. 找到你需要限制带宽和流量的网卡,进入属性:
2. 点击下方的安装,选择服务,然后选择从磁盘安装,并在浏览中找到ipfw+dummynet服务驱动的inf安装文件:
3. 在“此连接使用下列项目”中看到ipfw+dummynet之后,即代表ipfw+dummynet服务驱动安装成功,如果安装成功后遇到网卡无法使用的情况,一般会是前一次卸载没有卸载完全,重启电脑可以解决。
安装完成后可以以管理员权限运行binary目录下的testme.bat,如果运行结果中没有报警信息或者错误信息,则驱动安装是成功的
利用Dummynet模拟恶劣网络环境
利用dummynet的pipe,可以设置一些特定的规则,就可以达到模拟恶劣网络环境的目的,且这些设置对于在操作系统中运行的应用程序来说是透明的、自动生效的,不需要像在使用Fiddler来进行模拟时还需要设置http代理。
1. 低带宽模拟
恶劣网络环境最基础的模拟方式就是模拟较小带宽下的情况,利用dummynet中的pipe设置,可以将所有的tcp流和udp流的带宽限制在一定的级别上,运行一个管理员的命令行,并利用binary目录下的ipfw.exe文件就可以设置dummynet中的pipe,在命令行中执行以下命令:
ipfw add pipe 2 in proto tcp
ipfw pipe 2 config bw 2Mbit/s
即可将tcp的下行流量限制在2Mbit/s的带宽上
2. 高延时模拟
在管理员权限的命令行中执行以下命令:
ipfw add pipe 10 ip from any to any
ipfw pipe 10 config delay 200
这会使得所有的包都被延时200ms,这里利用ping命令来ping百度的方式来直接测试延时,命令执行以前结果如下:
命令执行以后结果如下:
3. 高丢包率模拟
在管理员权限的命令行中执行以下命令:
ipfw add pipe 10 ip from any to any
ipfw pipe 10 config plr 0.1
这里设置的是10%的丢包率,这里利用ping -t指令继续ping百度,来观察丢包率的变化:
执行以前:
执行以后:
4. 更加精细化的设置
可以看到相比Fiddler来说,利用dummynet可以更加精细化地从各个角度去设置一个恶劣网络环境的参数,上文中提到的带宽、延时和丢包率的模拟当然也可以组合起来使用,同时在设置pipe规则时还可以进一步设置更加精细的规则,比如指定的ip段,指定的协议等,比如这一段指令:
ipfw add pipe 4 src-ip 10.1.2.0/24 in
ipfw pipe 4 config bw 1Mbit/s delay 123 plr 0.1
就设置了一个只会介入源ip来自10.1.2.0/24网段的数据包的pipe,并且这个pipe会限制1Mbit/s的带宽,延时123ms,并且有10%的丢包率,通过组合这些参数,可以模拟出很复杂的恶劣网络环境,从而满足开发和测试的需要。相关的设置参数的说明和设置方法可以参考官网的相关文档和其他的一些说明文档。
在最后,当完成模拟恶劣网络环境后,执行以下命令:
ipfw -q flush
ipfw -q pipe flush
来清除所有设定的pipe和规则,进一步如果需要还原原来的环境的话可以将驱动删除,并重启计算机即可。