您可以通过使用Internet共享在Mac上创建无线网络,使用防火墙规则降级该接口以及将iPhone连接到该网络来实现此目的.这实际上可以调试连接到无线网络的任何设备.
使用此技术,您可以模拟极其微薄,有损或潜在的网络.
我使用这种技术而不是Apple的官方网络链接调节器有几个原因:
这使用ipfw的dummeynet功能.在现代版本的OS X中,ipfw在技术上已被弃用,但它仍然可以正常工作.不幸的是,pf(替换)还不支持任意数据包延迟.如果有变化,我会更新这个答案.

告诉Mac OS的内置防火墙(ipfw)以确保应用了延迟的数据包(通过ipfw用语中的"dummynet")仍然通过正常规则进行路由.这允许Internet共享继续工作:
phil@Nebula ~$ sudo sysctl -w net.inet.ip.fw.one_pass=0
net.inet.ip.fw.one_pass: 0 -> 0
Run Code Online (Sandbox Code Playgroud)配置iPhone流量通过的低质量管道(吞吐量为14Kb/s,丢包率为1%):
phil@Nebula ~$ sudo ipfw pipe 1 config bw 14KB/s
phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.01
Run Code Online (Sandbox Code Playgroud)下一步取决于您是在山狮或以下,还是小牛队.
对于Mountain Lion(10.8)或以下:
将数据包路由到管道,但仅限于通过AirPort接口的流量:
phil@Nebula ~$ sudo ipfw add 10 pipe 1 ip from any to any via en1
00010 pipe 1 ip from any to any via en1
Run Code Online (Sandbox Code Playgroud)
重要提示:如果您在没有物理以太网端口的情况下使用Air或新MacBook Pro,则可能会调用AirPort接口en0.如果是这样,请替换en1为en0上述情况.
对于小牛队(10.9):
检查输出ifconfig并查找Internet共享创建的网桥接口:
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=63<RXCSUM,TXCSUM,TSO4,TSO6>
ether xx:xx:xx:xx:xx:xx
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en4 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 6 priority 0 path cost 0
nd6 options=1<PERFORMNUD>
media: <unknown type>
status: inactive
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<RXCSUM,TXCSUM>
ether xx:xx:xx:xx:xx:xx
inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en1 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 5 priority 0 path cost 0
media: autoselect
status: active
Run Code Online (Sandbox Code Playgroud)
您想要具有IP地址的桥接接口; 在大多数情况下,它会bridge100.
将数据包路由到管道,但仅限于桥接接口上的流量:
phil@Nebula ~$ sudo ipfw add 10 pipe 1 ip from any to any via bridge100
00010 pipe 1 ip from any to any via bridge100
Run Code Online (Sandbox Code Playgroud)
bridge100如果系统上的名称不同,请进行更改.
您可以更改值,14KB/s并0.01在上面的步骤5中模拟不同类型的网络.您还可以指定config delay 1000引入1000毫秒的延迟.有关更多选项,请参见联机帮助页
您可以在为管道添加规则后继续重新配置管道.例如,要模拟接近蜂窝覆盖范围的边缘,请在应用运行并连接时发出此命令(95%丢包):
phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.95
Run Code Online (Sandbox Code Playgroud)
sudo ipfw add 10 …重新配置管道后无需再次运行.您可以编写这些更改的脚本以模拟极其动态的网络环境.
你可以发出sudo ipfw delete 10让一切恢复正常的方法,或者只是重新启动.
这是一个很棒的脚本,我在OS X上使用它来限制连接速度,或者只是关闭它,对于你想要的任何域.我希望我能记住我从哪里得到它来表扬.
将代码保存到计算机上的文件中,并将其命名为"限制".然后运行,只需在终端输入以下内容,然后选择以下速度之一:[full|fast|medium|slow|wwdc|off].
"./throttling medium"
Run Code Online (Sandbox Code Playgroud)
如果您将脚本设置为限制localhost:3000和stackoverflow.com,那么从浏览器(或iphone模拟器或其他)中的任何一个域加载页面将响应较慢并加载文件较慢.这对于测试iphone连接错误非常有用.
| 归档时间: |
|
| 查看次数: |
4626 次 |
| 最近记录: |