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


145

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

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


Я нашел, что принятый ответ (Network Link Conditioner) также является отличным быстрым и грязным решением проблемы с буферной загрузкой.
Роберт Тупело-Шнек

Ответы:


168

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

Предпочтение Network Link Conditioner можно бесплатно загрузить из Xcode (для Lion и более поздних версий ОС). Кроме того, iOS имеет аналогичную функцию, доступную из Xcode и iOS 6 или более поздней версии.

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

Более старые версии Xcode до версии 4.3.2 включали копию этого инструмента. Теперь вы используете XCode, чтобы загрузить его напрямую аналогично симуляторам iOS и документации для разработчиков.

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

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


1
: У меня даже есть Xcode, и я не знал об этом
Александр

21
Обязательно выключите его после того, как закончите тестирование!
Джейсон Салаз

1
Уточнение: вам на самом деле нужно загрузить аппаратные средства ввода-вывода от Apple. См. Установка средства кондиционирования сетевых ссылок Apple
daviesgeek,

2
Ограничение скорости, указанное ниже, работает превосходно . Я использую его сейчас для localhost: 8888 на MAMP.
Анриетт Майбург

1
Также обратите внимание, что iOS 6 имеет кондиционер сетевого соединения для тестирования на устройстве. Доступ к нему через Настройки-> Разработчик в разделе «Network Link Conditioner».
Майк Веллер

35

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

  1. Создайте канал "1", ограниченный 500KBytes / s через

    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: стандартный порт для шифрованного httpsтрафика SSL .

10
к сожалению, ipfw был удален в OS X 10.10 Yosemite
igo

Вы можете использовать pfctl для регулирования пропускной способности в OS X 10.10+ - spin.atomicobject.com/2016/01/05/…
Eugene A

Я добавил ответ ниже, который показывает pfctlи dnctlпример использования.
убершмекель

31

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


Мне нравится, что это более детально, чем инструмент XCode, упомянутый в принятом ответе. Спасибо за предложение.
Шолзингер

1
Действительно, я обнаружил, что «localhost» не работает, переключение на IP-адрес 127.0.0.1 сделало свое дело.
OlliM

4
SpeedLimit не работает с OS X 10.10, поскольку инструмент брандмауэра, который он использует, был удален: github.com/mschrag/speedlimit/issues/13
Робин

Ссылка на ограничение скорости не работает.
Джефф Холт

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

11

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

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

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

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

2
Добро пожаловать, чтобы спросить другого! Вместо того , чтобы писать ответ редактировать ответ Чужого, просто нажмите изменить или улучшить этот ответ кнопку ниже поста , который вы хотите улучшить .
Grg

9

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


Мне это действительно нужно для симулятора iPhone .. и тестирования подключений к серверу
aneuryzm

5

Пользователям 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 -

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


4

Вы также можете использовать ipfw, чтобы замедлить работу вашей сети.

Сначала настройте виртуальный канал для ограничения пропускной способности до 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
Бен Уилер,

-1

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


Чем это решение отличается от уже предоставленных ответов?
Нимеш Нима

Я по ошибке скачал Аппаратные средства, даже если это было для старой версии XCode, я думал, что это будет работать, потому что я не видел это для более новой версии. Нигде не написано, что для нового XCode 10.2 мне нужно выбрать Дополнительные инструменты, чтобы получить последнюю версию кондиционера сетевого соединения. Это упомянуто здесь, чтобы другие разработчики не тратили свое время. Если вы обнаружите, что он не отличается от других, минус пятнадцать раз. Я сделал это так, чтобы другие
получили

Всем, кто прочтет этот ответ, будет действительно полезно, если вы сможете отредактировать свой ответ и включить эту важную информацию. Кроме того, многие пользователи считают, что четко написанные и пошаговые инструкции действительно полезны.
Нимеш Нима

@NimeshNeema Я думаю, что все разработчики знают в сообществе, что вы можете найти этот инструмент с помощью дополнительных инструментов разработчика. Я написал шаги. Я не думаю, поэтому я должен упомянуть более подробно.
Киран Джасвани

Это совершенно нормально, и вам решать, как вы решите написать ответ. Упоминается лишь то, что обычно следуют практике, а не правилу :)
Нимеш Нима
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.