寻找比IPFW更好的减缓互联网连接速度的替代方案

20

我需要模拟较差的互联网连接速度,我找到了一些使用“ipfw pipe”命令实现该目的的文档,但最新的MAC OS版本中,ipfw已被弃用(并删除)...

我想知道是否有其他替代ipfw API的方法? 有人知道最新的Network Link Conditioner是如何实现的吗?

之前可用于减缓互联网连接速度的原始方法:

sudo ipfw pipe 1 config bw 56Kbit/s delay 200 plr 0.2

并清除管道:

sudo ipfw delete 1

谢谢。

4个回答

3

我不太了解Mac OS(我自己使用Linux),但我会尽力帮助。

经过一番搜寻得知,正如你所说,ipfw 似乎无法使用。

我也找不到一种通过命令行使用Network Link Conditioner的方法。一切都应该可以从命令行中使用,所以这很愚蠢。

一个解决方法是尝试从AppleScript中访问NLC。以下内容将为您开始切换NLC:

property thePane : "com.apple.Network-Link-Conditioner"  
tell application "System Preferences"  
activate  
  set the current pane to pane id thePane  
--delay 2  
end tell  
---  
tell application "System Events"  
  tell application process "System Preferences"  
  try  
  click ((checkboxes of window "Network Link Conditioner") whose description is "enable switch")  
  on error  
  click ((checkboxes of window "Network Link Conditioner") whose description is "enable switch")  
  end try  
  end tell  
end tell  

我认为你可以使用osascript <SCRIPT>命令在终端中执行脚本。

作为替代方案,付费软件Charles Proxy可用于执行限速,前提是你能让被测试的软件连接到代理的端口而不是直接连接到互联网。也许有免费的代理解决方案存在?

或许Squid可以在这方面发挥作用。SquidMan似乎是Mac上安装它的一个简单方法。看起来DelayPoolsClient Bandwidth Limits可能有助于模拟低速连接,尽管我找不到人们已经使用它们进行模拟的证据。


这是一个不错的解决方案。我尝试从命令行运行首选项窗格可执行文件(/Library/PreferencePanes/Network Link Conditioner.prefPane/Contents/MacOS/Network Link Conditioner),但出现错误“exec format error: ./Network \Link \Conditioner”。这很奇怪,因为“file Network\ Link\ Conditioner”显示它是一个具有2个架构的Mach-O通用二进制文件。 - JAL
能否通过命令行运行系统偏好设置面板并通过AppleScript切换到NLC面板? - Richard
理论上,您可以使用open /Library/PreferencePanes/Network Link Conditioner.prefPane打开NLC首选项窗格,或者从应用程序包中的二进制文件/Applications/System\ Preferences.app/Contents/MacOS/System\ Preferences打开主系统偏好设置窗格。 - JAL
在OS X El Capitan 10.11.1中,@Richard提供的脚本对我无效。该脚本确实会在面板中切换开关,但它不会影响实用程序,真正的开或关状态并没有改变。 - thijsonline

2

我找到了几个可能有效的解决方案。它们来自一些旧的帖子,但它们可能会有所帮助:

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

苹果公司为测试目的制作了一个非常方便的官方工具,可以减缓您的Mac上的网络连接。

网络链接条件首选项是从Xcode(适用于Lion及更高版本的操作系统)中免费下载的。此外,iOS也有类似的功能,可从Xcode和iOS 6或更高版本中访问。

如何在iPad上模拟不良Wi-Fi连接?

有几种方法可以做到这一点,具体取决于您的情况:
1. 远离路由器。虽然这可能显而易见,但我意识到在测试/调试时并不总是可能的(例如,如果您正在使用台式电脑)。
2. 在路由器和/或天线周围放置铝箔。这将通过创建临时法拉第笼来部分地阻挡一些或所有无线电信号。您得到的结果将取决于路由器信号的强度、距离以及其他环境因素。
3. 将路由器的无线信号功率设置为较低的水平。每个路由器的方法都不同,因此您需要查看用户指南以了解如何执行此操作。 Slow down internet for iOS simulator 您可以通过在设备上进行测试来将网络设置为缓慢特性。转到“设置”->“开发人员设置”->“网络链接条件”->“启用”。这适用于运行iOS 6的iPhone/iPad。

我不知道你是否还能做最后一个。


1
感谢您的回答,但第一个建议是过时的API,正如我已经描述的那样,而网络链接调节器是一个UI工具,我需要一些仍然支持的CLI /命令行命令...无论如何还是谢谢。 - Igal
13
如果你觉得这个问题已经被提过了,就标记它为重复。不要将其他StackOverflow帖子的链接作为答案发布。 - JAL
2
@JAL:这篇帖子已经从多个答案中整合了信息,提取了重要部分,并因此对似乎很难回答的问题提供了新颖的回应,而原帖作者也感谢了这位发帖者。你不应该过于草率地评判。您应该设立更高的标准来拒绝人们的贡献: 如果问题不严重,则应权衡去重的好处和社区被视为敌对的可能性之间的利弊。 - Richard
3
@Richard:很酷,下次我会复制粘贴其他SO问题的答案来回答悬赏问题。 - JAL
2
http://meta.stackoverflow.com/questions/308808/are-answers-that-aggregate-information-from-other-questions-on-stackoverflow-naa - apaul
显示剩余7条评论

0

过去我使用了许多方法来减慢网络连接速度,其中包括:

  • 同时下载一些庞大的Linux ISO文件;
  • 物理上拔掉以太网电缆(有一次,我甚至考虑过建立一个按钮设备,可以在两根Cat5电缆之间进行操作,而无需完全断开电缆)。
  • 使用ifconfig eth0 down ; sleep 1 ; ifconfig eth0 up命令。

希望这些方法中的一个或多个能够帮到您。


谢谢你的回答,iconfig很棒,但是你不能控制想要“丢弃”多少数据包,我说得对吗? - Igal

0
如果您正在进行测试/分析工作并希望减慢网络连接速度,那么一个选择是获取一个可以创建网络延迟/噪音的特定设备。
例如,Apposite Tech的mini2 WAN仿真器允许您更改带宽和数据包丢失的值。您也可以使用类似http://wanem.sourceforge.net/的东西自己制作设备。这取决于您的需求、时间和预算。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接