Mac模拟弱网环境

来源:互联网 发布:电信端口限制破解 编辑:程序博客网 时间:2024/06/06 02:59

转载请注明出处(author:Andyzhang)
模拟网络环境较弱的情况,是我们在开发及测试过程中需要注意,并考虑的问题,如何确认并找出网络较差时的问题。所以需要模拟弱网络环境。
*****2013-11-12 此处有一个问题:200那条命令没有生效,andy最近较忙,将会在不忙的时候研究一下,如何修改。如果大家有谁把这个bug解决了,麻烦给andy留个言,谢谢
#!/bin/bash#andyzhang#2013-08-01MIN_LAG=400 #最小时延,单位毫秒MAX_LAG=800#最大时延,单位毫秒IN_FLAG=true #对上行的限制,true为开启限制,false为关闭限制OUT_FLAG=true #对下行的限制,true为开启限制,false为关闭限制in_speed=20 #上行速度,kb为单位out_speed=20 #下行速度,kb为单位lose_rate_up=0.5 #上行丢包率lose_rate_down=0.5 #下行丢包率#############################################上面部分是配置部分,以下代码为命令执行过程#############################################((LAG_RANGE=MAX_LAG-MIN_LAG ))#INTERVAL=0.1 # time in between changes in latency (in seconds)if(${IN_FLAG});then#ipfw add 100 pipe 1 ip from 192.168.0.1/24 to any inipfw add 100 pipe 1 ip from any to 192.168.2.1/24 infiif(${OUT_FLAG});then#ipfw add 200 pipe 2 ip from any to 192.168.0.1/24 outipfw add 200 pipe 2 ip from 192.168.2.1/24 to any outfi# set up initial random delay(( delay = RANDOM % LAG_RANGE + MIN_LAG ))# start ping background process and stash result in a fileping -i 0.05 localhost > ping_out &PING_PID=$! while(true)dosleep $INTERVALif(${IN_FLAG});then# change the delay to a new random value((delay=RANDOM % LAG_RANGE+MIN_LAG))ipfw pipe 1 config delay ${delay}ms bw ${in_speed}Kb plr ${lose_rate_up}echo "setting update delay to" $delay "ms" $in_speed"kb"fiif(${OUT_FLAG});then# change the delay to a new random value((delay=RANDOM%LAG_RANGE+MIN_LAG))ipfw pipe 2 config delay ${delay}ms bw ${out_speed}Kb plr ${lose_rate_down}echo "setting download delay to" $delay "ms"$out_speed"kb"fidone# kill the ping processkill $PING_PID# remove the pipe and the associated ruleif(${IN_FLAG});thenipfw delete 100ipfw pipe 1 deletfiif(${OUT_FLAG});thenipfw delete 200ipfw pipe 2 deletefi

弱网使用说明:模拟网络环境较弱的情况,是我们在开发及测试过程中需要注意,并考虑的问题,如何确认并找出网络较差时的问题。所以需要模拟弱网络环境。

(author:Andyzhang)

脚本weaknet.sh内容如文章最上的shell代码:

1.弱网脚本weaknet.sh使用过程:

1.1、启动MAC命令行窗口

1.2、输入su,然后输入root密码,启用root权限(su不起作用的话,请设置root账户密码,因为可能是root用户从来没有被使用过)

1.3、进入weaknet.sh所在目录(cd Desktop)

1.4、执行脚本sh weaknet.sh

2.脚本相关配置项说明

配置项分为对上行和下行两种过程的控制,IN_FLAG为对上行是否进行限制的标识,true时,限制配置起作用,false时,限制配置将不起作用。对下行限制的控制标记OUT_FLAG是否起作用的控制同上。

(author:Andyzhang)

3.弱网使用操作注意事项

3.1内部网ip的配置

这部分Ipfw配置手册上给出的内部网络配置为绿色注释部分的192.168.0.1/24,但是实际使用时并不起作用,后来排除问题,发现此处需要动态修改,根据本地wifi自动设定的子网配置。如果wifi是动态设置局域网网段的,将会因为此处的变化,导致命令失效,排查弱网失效原因此处需要注意。

3.2停止脚本时注意事项

如果是ctrl+C停止脚本,请在停止运行后输入一下四条命令,

ipfw delete 100    ipfw pipe 1 delet   ipfw delete 200    ipfw pipe 2 delet

若不输入此四条命令,那么下次运行时,修改的配置有不起作用的可能。

(author:Andyzhang)

4.ipfw相关内容(此部分为附加说明)

ipfw 是 FreeBSD 内建的防火墙指令,我们可以用它来管理进出的网络交通。MAC继承了这部分内容。

    基本语法是先将要设定频宽的规则加入:ipfw add pipe pipe_nr ....

    再设定该规则的频宽:ipfw pipe pipe_nr config bw B delay D queue Q plr P

    这里的 pipe_nr 指的是 pipe 规则编号,从 1~65535是指频宽,可以表示为 bit/sKbit/sMbit/sBytes/sKBytes/s、或 MBytes/s是延迟多少 milliseconds (1/1000)是 queue size 的大小 (单位为 packages 或 Bytes)是要随机丢弃的封包数量。

(author:Andyzhang)