Як імітувати повільні інтернет-з'єднання на mac


145

Яке хороше програмне рішення для уповільнення інтернет-з'єднань на mac для тестування та моделювання?

Моя головна потреба полягає в тестуванні коду в iPhone / iOS симуляторі, тому сповільнення підключення до конкретних програм або процесів було б чудово.


Я визнав, що прийнята відповідь (Кондиціонер мережевих посилань) також є чудовим швидким та брудним вирішенням проблем із буферним заголовком.
Роберт Тупело-Шнек

Відповіді:


168

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

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

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

Старіші версії Xcode до версії 4.3.2 вбудовували копію цього інструменту. Тепер ви використовуєте Xcode, щоб завантажити його безпосередньо аналогічно симуляторам iOS та документації для розробників.

Є 11 вбудованих профілів із мережі Lossy Edge із затримкою 400 мс до кабельного модему. Якщо вам потрібні інші обмеження, ви можете створювати власні профілі з вашими власними настройками , або ви можете також використовувати ipfwсамостійно , як описані в Craig Хокенберрі статті «s повільної їзди, зробити його легким Він також згадує Speed Limit панелі по Mike Schrag , який менше місця для завантаження ніж Xcode, але має менше можливостей, ніж інструмент Apple.

Це уповільнює весь мережевий стек, тому ви не можете дроселювати за допомогою програми, не роблячи такі речі, як встановити лева у віртуальну машину і встановити цей VM із заглушеним стеком.


1
: У OI навіть є Xcode і не знав про це
Олександр,

21
Не забудьте вимкнути його після тестування!
Джейсон Салаз

1
Пояснення: ви фактично повинні завантажити апаратні інструменти вводу-виводу з Apple. Див. Установка інструменту кондиціонера для мережевих посилань на яблука
daviesgeek

2
Згаданий нижче обмеження швидкості працює чудово . Я зараз використовую його для localhost: 8888 на MAMP.
Anriëtte Myburgh

1
Також зауважте, що в iOS 6 є кондиціонер мережевої посилання для тестування на пристрої. Доступ до нього здійснюється через Налаштування-> Розробник у розділі «Кондиціонер мережевих посилань».
Майк Веллер

35

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
на жаль, ipfw було видалено в ОС X 10.10 Yosemite
igo

Ви можете використовувати pfctl для пропускання пропускної здатності на ОС X 10.10+ - spin.atomicobject.com/2016/01/05/…
Євген А

Нижче я додав відповідь, яка показує pfctlта dnctlприклади використання.
ubershmekel

31

Обмеження швидкості - це область системних налаштувань для навмисного та вибіркового уповільнення конкретних портів та доменів.


Мені подобається, що він більш деталізований, ніж інструмент XCode, згаданий у прийнятій відповіді. Дякую за пропозицію.
sholsinger

1
Дійсно, я виявив, що "localhost" не працює, перемикання на ip адресу 127.0.0.1 зробило трюк.
OlliM

4
SpeedLimit не працює в ОС X 10.10, оскільки інструмент брандмауера, який він використовує, було видалено: github.com/mschrag/speedlimit/isissue/13
Робін

Посилання на обмеження швидкості порушено.
Джефф Холт

Здається, джерело для обмеження швидкості зараз не підтримується, але він доступний тут і має більш сучасні пошуки вил тут, хоча я зовсім не перевіряв це
Бред Паркс

11

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

Перейдіть на сторінку https://developer.apple.com/downloads та знайдіть "Кондиціонер мережевих посилань" або "Додаткові інструменти для XCode", останнє - назва пакету, в якому він знаходиться.

Щоб завантажити його через Xcode 8.x:

  • Клацніть на меню Xcode
  • Перейдіть на сторінку Відкрити інструмент для розробників> Інші інструменти для розробників ...
  • Це відкриє сторінку на сайті developer.apple.com (Примітка. Можливо, вам потрібно буде увійти спочатку)
  • Клацніть на знаку "+" поруч із Додатковими інструментами для Xcode 8.x
  • Клацніть на URL-адресу для завантаження

2
Ласкаво просимо до "Запитайте різних" Замість того , щоб писати відповідь редагувати відповідь Чужого, просто натисніть змінити або поліпшити цю відповідь кнопку нижче поста , який ви хочете поліпшити .
грг

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 ви знайдете Кондиціонер мережевих посилань.


Чим це рішення відрізняється від вже наданих відповідей?
Німеш Неема

Я помилково завантажив апаратні засоби, навіть якщо це був для старої версії XCode, я подумав, що він буде працювати, тому що я не бачив його для нової версії. Ніде не написано, що для нового XCode 10.2 я повинен вибрати Додаткові інструменти, щоб отримати останній кондиціонер мережі. Це згадується тут, щоб інші розробники не витрачали свій час. Якщо ви виявите, що вона не відрізняється від інших, мінус п’ятнадцять разів. Я зробив це, щоб інші
отримували

Дійсно допоможе кожному, хто читає цю відповідь, якщо ви можете відредагувати свою відповідь та включити цю важливу інформацію. Також багато користувачів вважають, що чітко написані та покрокові інструкції є дійсно цінними.
Німеш Неема

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

Це абсолютно добре, і ви визначаєте, як ви вирішите написати відповідь. Згадані лише загалом дотримуються практики, а не правила :)
Німеш Неема
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.