Throttling Your Network Connection on Mac OS X
Sometimes you just need to sloooooow doooooooown to test how your software behaves when your internet connection is crappy.
Linux has tc to do this, but what about Mac OS X?
That’s where ipfw comes in. It does a lot of stuff. I mean a lot, but we’re just going to use it to slow down our internet connection today.
Here’s an example that throttles your web browsing experience to 50 KBytes/second:
sudo ipfw pipe 1 config bw 50KByte/s >/dev/null sudo ipfw add 1 pipe 1 src-port 80 sudo ipfw add 1 pipe 1 dst-port 80
And to turn it off (this is an important step!):
sudo ipfw delete 1
To make this super easy to use, I wrote a handy little shell script called network-throttle, which you can put in your PATH and run like this:
network-throttle on --port 80 --rate 50KByte/s
And to turn it off:
network-throttle off
You can download the shell script below. Put it in your PATH and name it network-throttle.
Or, if you like things shiny, pointy, and clicky, you can use the Apple Network Link Conditioner by installing X-Code.
Here’s the magical shell script:
#!/bin/bash # # Throttles your Mac OS X internet connection on one port. # Handy for testing set -e RATE=15KByte/s PORT=80 PIPE_NUMBER=1 ACTION= function usage() { echo $1 echo echo "Usage: `basename "$0"` <action> [options]" echo " Action:" echo " on" echo " off" echo echo " Options:" echo " --rate <rate>" echo " Example: --rate 100KByte/s" echo " --port <port> (default is 80 if you don't specify --port)" echo " Example: --port 80" exit 1 } function turn_throttling_off() { echo "Turning off network throttling" sudo ipfw delete $PIPE_NUMBER || echo "Is it already turned off?" } function turn_throttling_on() { echo "Throttling traffic to port $PORT: $RATE" sudo ipfw pipe $PIPE_NUMBER config bw $RATE >/dev/null sudo ipfw add $PIPE_NUMBER pipe $PIPE_NUMBER src-port $PORT >/dev/null sudo ipfw add $PIPE_NUMBER pipe $PIPE_NUMBER dst-port $PORT >/dev/null } # Grab command line args: while [ -n "$1" ]; do case $1 in --rate) shift RATE=$1 ;; --port) shift PORT=$1 ;; *) ACTION=$1 esac shift done [ -n "$ACTION" ] || usage "Error: no action specified" case $ACTION in on) turn_throttling_off >/dev/null 2>&1 # in case it's already on, clear out the old one turn_throttling_on ;; off) turn_throttling_off ;; *) usage "Error: Bad action specified" ;; esac
3 comments to “Throttling Your Network Connection on Mac OS X”
Thanks buddy, very useful.
Thanks man. Helped me a lot!
Thanks!
I was having issues with owncloud, this solved it :)