Как имитировать медленное интернет-соединение на Mac

Какое хорошее программное решение для замедления интернет-соединения на Mac для тестирования и моделирования?

Моя основная потребность заключается в тестировании кода в симуляторе iPhone/iOS, поэтому замедление соединения для определенных приложений или процессов было бы здорово.

Ответы (10)

Официальный инструмент Apple для замедления сетевых подключений на вашем Mac в целях тестирования — это Network Link Conditioner .

Кроме того, в iOS есть аналогичная функция, доступная из Xcode и iOS 6 или более поздней версии.

введите описание изображения здесь

В более старые версии Xcode до версии 4.3.2 была встроена копия этого инструмента. Этот поток SO документирует некоторую историю инструмента аналогично симуляторам iOS и документации для разработчиков.

Существует 11 встроенных профилей от сети Lossy Edge с задержкой 400 мс до кабельного модема. Если вам нужны другие ограничения, вы можете создавать пользовательские профили со своими собственными настройками или вы также можете использовать себя ipfw, как описано в статье Крейга Хокенберри « медленная езда , упрощайте » . чем Xcode, но имеет меньше возможностей, чем инструмент Apple.

Это замедляет работу всего сетевого стека, поэтому вы не можете дросселировать отдельно для каждого приложения, не выполняя таких действий, как установка lion на виртуальной машине и настройка этой виртуальной машины с регулируемым стеком.

Обязательно выключите его после завершения тестирования!
Также обратите внимание, что в iOS 6 есть кондиционер сетевых ссылок для тестирования на устройстве. Получите к нему доступ через «Настройки» -> «Разработчик» в разделе «Кондиционер сетевых каналов».
похоже, что он не работает для трафика типа localhost. я вижу, что кто-то сообщил, что это сработало при использовании localhost: 8888 с MAMP, но я подключаюсь к виртуальной машине Windows через порт 8888.
Обратите внимание, что инструмент Network Link Conditioner Tool — это, по сути, просто графический интерфейс для управления правилами dnctl/ ipfwdummynet через его nlcdдемона (см.: newosxbook.com/bonus/vol1ch16.html )

OS X 10.9 и более ранние версии предоставляют ipfwи позволяют вам определять пользовательские правила брандмауэра. Создайте канал с ограниченной пропускной способностьюipfw , и вы сможете запускать свои тесты и симуляции.

  1. Создайте канал «1» с ограничением скорости 500 КБ/с через

    sudo ipfw pipe 1 config bw 500KByte/s
    
  2. Направьте весь сетевой трафик порта 80 через канал «1», используя

    sudo ipfw add 1 pipe 1 src-port 80
    
  3. Когда труба вам больше не нужна, удалите ее из порта с помощью

    sudo ipfw delete 1
    

Другой

  • Если вы хотите установить более высокие дорожные барьеры, вы можете использоватьMByte/s
  • Порт 80: стандартный порт для незашифрованного httpтрафика. Этот порт используется для большинства просмотров и загрузок. Вы должны быть в порядке с этим в большинстве случаев.
  • Порт 443: стандартный порт для зашифрованного SSL - httpsтрафика.
Как насчет пост-10.9, что мы используем вместо ipfw?

Ограничение скорости — это панель Системных настроек для преднамеренного и выборочного замедления определенных портов и доменов.

Исходный код ограничения скорости сейчас не поддерживается, но доступен здесь и имеет более современную вилку здесь, хотя я ее вообще не тестировал .

Чтобы добавить к принятому ответу: похоже, вам не нужен XCode, просто учетная запись на веб-сайте Apple Developer (проще, чем сначала загрузить пакет XCode объемом 2 ГБ, если у вас его еще нет).

Перейдите на https://developer.apple.com/downloads и найдите «Кондиционер сетевых ссылок» или «Дополнительные инструменты для XCode», причем последнее является названием пакета, в котором он находится.

Чтобы загрузить его через Xcode 8.x:

  • Нажмите на меню Xcode
  • Перейдите в «Открыть инструмент разработчика» > «Дополнительные инструменты разработчика»...
  • Откроется страница на сайте developer.apple.com (примечание: сначала может потребоваться авторизация)
  • Нажмите на знак «+» рядом с «Дополнительные инструменты для Xcode 8.x».
  • Щелкните URL-адрес загрузки.

Если вам нужен дроссель только для веб-разработки, я могу искренне порекомендовать Чарльза . В любом случае, это отличный инструмент для отладки HTTP-приложений, и среди его многочисленных функций есть опция Throttle. Программное обеспечение не из дешевых, но оно отлично справляется со своей задачей.

Пользователям Mac OS X 10.10+ необходимо использовать dnctl, pfctlно найти задокументированные примеры использования непросто.

# 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 -

Я считаю, что это также влияет на локальные каналы, которые замедляют мою отладку кода, так что помните об этом.

Мне нужно было sudo pfctl -Eсначала запустить, чтобы включить pfctl. Я также убедился, что мой брандмауэр включен в «Системные настройки»> «Безопасность и конфиденциальность»> «Брандмауэр», но я не уверен, что это необходимо.

Вы также можете использовать ipfw piping для замедления вашей сети.

Во-первых, настройте виртуальную «трубу», чтобы ограничить пропускную способность до 800 КБит/сек:

ipfw pipe 1 config bw 800Kbit

Затем вы можете настроить правила для пропуска трафика через этот канал (канал 1). (порты 6881-6890 — битторрент-трафик)

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

Вот еще один пример ограничения трафика до 10 Кбит/с с определенного IP-адреса:

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

(Источник)

ipfw был удален в OSX 10.10

Я нашел эту команду терминала полезной в моем случае

Установка:

Откройте терминал Mac и введите эту команду

sudo npm install @sitespeed.io/throttle -g

Применение:

Откройте терминал и введите нужную команду

Запустить дроссель (предположим, нам нужна скорость загрузки и выгрузки 5000 кбит/с)

throttle --up 5000 --down 5000

Остановить дроссельную заслонку

throttle --stop

Также есть готовые профили.

--profile         Premade profiles, set to one of the following
                     3g: up:768 down:1600 rtt:150
                     3gfast: up:768 down:1600 rtt:75
                     3gslow: up:400 down:400 rtt:200
                     2g: up:256 down:280 rtt:400
                     cable: up:1000 down:5000 rtt:14
                     dsl: up:384 down:1500 rtt:14
                     3gem: up:400 down:400 rtt:200
                     4g: up:9000 down:9000 rtt:85
                     lte: up:12000 down:12000 rtt:35
                     edge: up:200 down:240 rtt:35
                     dial: up:30 down:49 rtt:60
                     fois: up:5000 down:20000 rtt:2

Использование профилей

throttle 4g

В XCode 12 вам необходимо установить дополнительные инструменты для XCode 12 вместо аппаратных инструментов ввода-вывода.

Спасибо. Я очистил некоторые комментарии со старым названием - этот ответ в основном то, что вы считаете правильным ?

Для XCode 10.2 в разделе Дополнительные инструменты разработчика — Дополнительные инструменты для XCode 10.2 вы найдете Network Link Conditioner.