如何在Mac上模拟慢速互联网连接


145

有什么好的软件解决方案可以减慢Mac上用于测试和模拟的Internet连接?

我的主要需求是在iPhone / iOS模拟器中测试代码时,因此减慢特定应用程序或进程的连接速度会很棒。


我发现被接受的答案(网络链接调节器)也是解决缓冲区膨胀问题的一种很好的快捷方法。
罗伯特·图珀洛·施内克

Answers:


168

苹果公司提供了一个非常方便的官方工具,可以降低Mac上的网络连接速度,以进行测试。

网络链接润发的偏好是在Xcode免费下载(对于狮子和以后的操作系统)。此外,iOS具有可从Xcode和iOS 6或更高版本访问的类似功能。

在此处输入图片说明

Xcode 4.3.2之前的较旧版本嵌入了此工具的副本。现在,您可以使用Xcode以类似于iOS模拟器和开发人员文档的方式直接下载Xcode

从Lossy Edge网络以400毫秒的延迟到电缆调制解调器有11个内置配置文件。如果您需要其他限制,则可以使用自己的设置创建自定义配置文件,或者也可以ipfw按照Craig Hockenberry的文章“ 慢速行驶 ”中的说明使用自己,轻松一点。它还提到了Mike Schrag的“ 速度限制”面板,下载量较小。比Xcode少,但比Apple工具少。

这会减慢整个网络堆栈的速度,因此您不能在每个应用程序的基础上进行节流,而无需在虚拟机中安装lion并使用节流的堆栈来设置该VM。


1
:OI甚至都拥有Xcode,对此一无所知
亚历山大

21
完成测试后,请务必将其关闭!
詹森·萨拉兹

1
说明:您实际上必须从Apple下载硬件IO工具。请参阅“ 安装Apples网络链接调节器工具
daviesgeek 2012年

2
下面提到的限速效果非常好。我现在在MAMP上将其用于localhost:8888。
Anriëtte迈伯勒

1
另请注意,iOS 6具有用于在设备上进行测试的网络链接调节器。通过“网络链接调节器”部分下的“设置”->“开发者”访问它。
Mike Weller 2012年

35

OS X 10.9和更早版本提供了ipfw该功能,它允许您定义自定义防火墙规则。创建一个具有有限的带宽管使用ipfw,你可以运行你的测试和模拟。

  1. 通过创建一个限制为500KBytes / s的管道“ 1”

    sudo ipfw pipe 1 config bw 500KByte/s
    
  2. 使用管道“ 1”引导端口80的所有网络流量

    sudo ipfw add 1 pipe 1 src-port 80
    
  3. 当您不再需要管道时,请使用以下命令将其从端口中删除

    sudo ipfw delete 1
    

其他

  • 如果您想设置更高的交通障碍,可以使用 MByte/s
  • 端口80:未加密http流量的标准端口。此端口用于大多数浏览和下载。在大多数情况下,您应该对此感到满意。
  • 端口443:SSL加密https流量的标准端口。

10
不幸的是,ipfw已在OS X 10.10 Yosemite中删除
igo 2014年

您可以使用pfctl的在OS X 10.10+带宽限制- spin.atomicobject.com/2016/01/05/...
尤金

我已经添加了低于显示答案pfctldnctl用法示例。
ubershmekel

31

速度限制是“系统偏好设置”窗格,用于有意有选择地放慢特定端口和域的速度。


我喜欢它比接受的答案中提到的XCode工具更精细。谢谢你的建议。
sholsinger 2011年

1
真的,我发现“ localhost”不起作用,切换到IP地址127.0.0.1可以解决问题。
OlliM 2014年

4
SpeedLimit自OS X 10.10起已失效,因为它使用的防火墙工具已被删除:github.com/mschrag/speedlimit/issues/13
Robin Robin

限速链接已断开。
杰夫·霍尔特

“速度限制”的来源现在似乎尚未维护,但可以在此处使用,尽管我还没有对其进行任何测试,但此处有一个更新的分支
Brad Parks

11

要添加到已接受的答案中:看起来您不需要XCode,只需在Apple Developer网站上创建一个帐户即可。(比起先下载2GB XCode软件包(如果您还没有的话)更简单)。

转到https://developer.apple.com/downloads并搜索“ Network Link Conditioner”或“ XCode的其他工具”,后者是在其中找到的软件包的名称。

要通过Xcode 8.x下载它:

  • 点击Xcode菜单
  • 转到打开开发者工具>更多开发者工具...
  • 这将在developer.apple.com上打开一个页面(注意:您可能需要先登录)
  • 单击“ Xcode 8.x其他工具”旁边的“ +”号。
  • 点击下载网址

2
欢迎询问不同!无需编写答案来编辑其他人的答案,只需单击要改进的帖子下方的编辑”或“ 改善此答案”按钮。
grg

9

如果您只需要进行Web开发,我可以全力推荐Charles。无论如何,它都是调试HTTP应用程序的出色工具,并且在众多功能中,它还有Throttle选项。该软件并不便宜,但是却做得很好。


我实际上需要它用于iPhone模拟器..并测试与服务器的连接
aneuryzm 2011年

5

Mac OS X 10.10+用户需要使用dnctlpfctl但是很难找到文档化的使用示例。

# Configure `pfctl` to use `customRule`. 
(cat /etc/pf.conf && echo "dummynet-anchor \"customRule\"" && echo "anchor \"customRule\"") | sudo pfctl -f -

# Define `customRule` to pipe traffic to `pipe 1`.
# Note this is the actual port definition, not a textual comment
echo "dummynet in quick proto tcp from any to any port 443 pipe 1" | sudo pfctl -a customRule -f -

# Define what `pipe 1` should do to traffic
sudo dnctl pipe 1 config delay 10000
sudo dnctl pipe 1 config bw 10Kbit/s

# DO NOT FORGET to undo these when you're done
sudo dnctl -q flush
sudo pfctl -f /etc/pf.conf

如果您想全力以赴地塑造一切,可以使用:

echo "dummynet in quick proto tcp from any to any pipe 1" | sudo pfctl -a customRule -f -

我相信这也会影响localhost管道,这会减慢我的vs代码调试速度,因此请注意。


4

您还可以使用ipfw管道来降低网络速度。

首先,设置虚拟“管道”以将吞吐量限制为800KBit / sec:

ipfw pipe 1 config bw 800Kbit

然后,您可以设置规则以通过该管道(管道1)推送流量。(端口6881-6890为Bittorrent通信量)

ipfw add 10 pipe 1 tcp from any to me 6881-6890
ipfw add 11 pipe 1 tcp from any 6881-6890 to me

这是将流量从特定IP地址限制到10Kbit / sec的另一个示例:

ipfw pipe 2 config bw 10Kbit
ipfw add 15 pipe 2 ip from me to 64.81.84.114

(资源)


ipfw在OSX 10.10中被删除
Ben Wheeler

-1

对于XCode 10.2,在“更多开发者工具-XCode 10.2的其他工具”中,您将找到Network Link Conditioner。


该解决方案与已经提供的答案有何不同?
Nimesh Neema

我错误地下载了硬件工具,即使它是用于旧版本的XCode,我也认为它可以工作,因为我没有在较新的版本中看到它。没有地方写过,对于新的XCode 10.2,我必须选择“其他工具”以获取最新的网络链接调节器。这里提到的是,这样其他开发人员就不会浪费时间。如果您发现它与其他没有什么不同,请减去十五次。我这样做是为了让其他人通过搜索Newly XCode 10.2
Kiran Jasvanee

如果您可以编辑您的答案并包含此关键信息,那么它将真正帮助阅读此答案的任何人。同样,许多用户发现清楚地写成逐步的说明确实很有价值。
Nimesh Neema

@NimeshNeema我想所有开发人员都可以在社区中知道可以通过更多开发人员工具找到该工具。我已经写好了步骤。我不认为,所以我应该更详细地提及。
Kiran Jasvanee,

完全没问题,由您决定如何编写答案。提到的只是一般遵循的做法,而不是规则:)
Nimesh Neema
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.