Вы можете сделать это, создав беспроводную сеть на своем Mac с помощью общего доступа к Интернету, снизив уровень этого интерфейса с помощью правил брандмауэра и подключив iPhone к этой сети.Это на самом деле будет работать для отладки любого устройства, которое подключается к беспроводной сети.
Используя эту технику, вы можете симулировать очень скудные, с потерями или скрытые сети.
Я использую эту технику вместо AppleОфициальный Network Link Conditioner по нескольким причинам:
- Дросселирование может применяться только к определенным подключенным устройствам, но не влияет на сетевое подключение вашего компьютера разработки.
- Сценарий можно быстро моделироватьизменение или «взрывные» сети.
- В отличие от встроенного в iOS Network Link Conditioner, вы можете изменять настройки, пока ваше приложение остается на переднем плане.
При этом используется dummeynet
ipfw.особенность.ipfw технически устарел в современных версиях OS X, но все равно работает нормально.К сожалению, pf (замена) пока не поддерживает произвольные задержки пакетов.Я обновлю этот ответ, если что-то изменится.
Создание ужасной сети Wi-Fi
- Подключите Ethernet, если вы этого еще не сделали.
- Включите ИнтернетСовместное использование на панели общего доступа в Системных настройках.Выберите «Поделиться своим подключением из: Ethernet» и установите флажок «Wi-Fi».
- Подключите телефон к сети, которую вы только что создали, и убедитесь, что вы можете просматривать веб-страницы.
Скажите встроенному брандмауэру Mac OS (ipfw), чтобы обеспечить пакетыс задержкой (проходящей через "dummynet" на языке ipfw) все еще маршрутизируются по обычным правилам.Это позволяет Internet Sharing продолжать работать:
phil@Nebula ~$ sudo sysctl -w net.inet.ip.fw.one_pass=0
net.inet.ip.fw.one_pass: 0 -> 0
Настроить канал низкого качества, по которому будет проходить трафик вашего iPhone (пропускная способность 14 Кбит / с с потерей пакетов 1%):
phil@Nebula ~$ sudo ipfw pipe 1 config bw 14KB/s
phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.01
Следующий шаг зависит от того, находитесь ли вы на Горном льве или ниже, или на Маверикс.
Для Горного льва(10.8) или ниже:
Направляйте пакеты в канал, но только для трафика через интерфейс AirPort:
phil@Nebula ~$ sudo ipfw add 10 pipe 1 ip from any to any via en1
00010 pipe 1 ip from any to any via en1
Важно : Если вы 'Если вы используете Air или новый MacBook Pro без физического порта Ethernet, ваш интерфейс AirPort, скорее всего, будет называться en0
.Замените en1
на en0
выше, если это так.
Для Mavericks (10.9):
Проверьте вывод ifconfig
и найдите мостинтерфейс, созданный с помощью Internet Sharing:
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=63<RXCSUM,TXCSUM,TSO4,TSO6>
ether xx:xx:xx:xx:xx:xx
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en4 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 6 priority 0 path cost 0
nd6 options=1<PERFORMNUD>
media: <unknown type>
status: inactive
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<RXCSUM,TXCSUM>
ether xx:xx:xx:xx:xx:xx
inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en1 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 5 priority 0 path cost 0
media: autoselect
status: active
Требуется интерфейс моста с IP-адресом;в большинстве случаев это будет bridge100
.
Направлять пакеты в канал, но только для трафика через интерфейс моста:
phil@Nebula ~$ sudo ipfw add 10 pipe 1 ip from any to any via bridge100
00010 pipe 1 ip from any to any via bridge100
Изменить bridge100
, если он имеет другойимя в вашей системе.
Моделирование изменяющейся сети
Вы можете изменить значения 14KB/s
и 0.01
в шаге 5 выше, чтобы имитировать различные типы сетей.Вы также можете указать config delay 1000
, чтобы ввести задержку в 1000 мс.См. man-страницу для получения дополнительных опций.
Вы можете продолжить перенастройку канала после добавления правила для него.Например, чтобы смоделировать близость к границе сотовой связи, введите эту команду, когда ваше приложение работает и подключено (потеря пакета 95%):
phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.95
Нет необходимости снова запускать sudo ipfw add 10 …
после перенастройкитруба.Вы можете запрограммировать эти изменения для имитации чрезвычайно динамичной сетевой среды.
Очистка
Вы можете выполнить sudo ipfw delete 10
, чтобы вернуть все в нормальное состояние или просто перезагрузиться.