Jak symulować wolne połączenia internetowe na komputerze Mac

145

Jakie jest dobre oprogramowanie do spowalniania połączeń internetowych na komputerze Mac w celu testowania i symulacji?

Moją podstawową potrzebą jest testowanie kodu w symulatorze iPhone / iOS, więc spowolnienie połączenia dla określonych aplikacji lub procesów byłoby świetne.

aneuryzm
źródło
Uważam, że zaakceptowana odpowiedź (Network Link Conditioner) to również doskonałe szybkie i brudne obejście problemów z buforowaniem buforów.
Robert Tupelo-Schneck

Odpowiedzi:

168

Firma Apple stworzyła bardzo przydatne oficjalne narzędzie do spowalniania połączeń sieciowych na komputerze Mac w celach testowych.

Network link odżywka preferencji jest do pobrania za darmo z poziomu Xcode (dla Lwa i późniejszym OS). Ponadto iOS ma podobną funkcję dostępną z poziomu Xcode i iOS 6 lub nowszego.

wprowadź opis zdjęcia tutaj

Starsze wersje Xcode przed wersją 4.3.2 osadziły kopię tego narzędzia. Teraz używasz Xcode, aby pobrać go bezpośrednio w podobny sposób, jak symulatory iOS i dokumentacja programisty.

Istnieje 11 wbudowanych profili z sieci Lossy Edge z opóźnieniem 400 ms do modemu kablowego. Jeśli potrzebujesz innych limitów, możesz utworzyć niestandardowe profile z własnymi ustawieniami lub możesz również użyć ipfwsiebie, jak opisano w artykule Craiga Hockenberry'aPowolna jazda, ułatw sobie”. Wspomina również o panelu ograniczenia prędkości Mike'a Schraga, który jest mniejszym plikiem do pobrania niż Xcode, ale ma mniej opcji niż narzędzie Apple.

Spowalnia cały stos sieciowy, więc nie można ograniczać przepustowości dla poszczególnych aplikacji bez robienia rzeczy takich jak instalacja lwa na maszynie wirtualnej i ustawienie tej maszyny wirtualnej za pomocą przepustnicy.

bmike
źródło
1
: OI nawet Xcode i nie wiedziałem o tym
Alexander
21
Pamiętaj o wyłączeniu go po zakończeniu testowania!
Jason Salaz,
1
Wyjaśnienie: w rzeczywistości musisz pobrać sprzętowe narzędzia IO od Apple. Zobacz: Instalowanie narzędzia Apple Network Link Conditioner
daviesgeek,
2
Wspomniane poniżej ograniczenie prędkości działa doskonale . Używam go teraz dla localhost: 8888 na MAMP.
Anriëtte Myburgh
1
Należy również pamiętać, że iOS 6 ma kondycjoner łącza sieciowego do testowania na urządzeniu. Uzyskaj do niego dostęp poprzez Ustawienia-> Deweloper w sekcji „Network Link Conditioner”.
Mike Weller
35

System OS X 10.9 i wcześniejsze wersje zapewniają ipfwi pozwalają definiować niestandardowe reguły zapory. Utwórz potok z ograniczoną przepustowością przy użyciu, ipfwa będziesz mógł uruchamiać testy i symulacje.

  1. Utwórz potok „1” ograniczony do 500 KB / s przez

    sudo ipfw pipe 1 config bw 500KByte/s
    
  2. Poprowadź cały ruch sieciowy portu 80 przez potok „1” za pomocą

    sudo ipfw add 1 pipe 1 src-port 80
    
  3. Jeśli nie potrzebujesz już potoku, usuń go z portu za pomocą

    sudo ipfw delete 1
    

Inny

  • Jeśli chcesz ustawić wyższe bariery drogowe, możesz użyć MByte/s
  • Port 80: standardowy port dla niezaszyfrowanego httpruchu. Ten port służy do większości przeglądania i pobierania. W większości przypadków powinieneś sobie z tym poradzić.
  • Port 443: standardowy port dla httpsruchu szyfrowanego SSL .
gentmatt
źródło
10
niestety, ipfw został usunięty w OS X 10.10 Yosemite
igo
Możesz użyć pfctl do ograniczenia przepustowości w OS X 10.10+ - spin.atomicobject.com/2016/01/05/…
Eugene A
Dodałem odpowiedź poniżej, który pokazuje pfctli dnctlprzykład użycia.
ubershmekel
31

Ograniczenie prędkości to panel Preferencje systemowe do celowego i selektywnego spowalniania określonych portów i domen.

Randy6T9
źródło
Podoba mi się, że jest bardziej szczegółowy niż narzędzie XCode wspomniane w zaakceptowanej odpowiedzi. Dzieki za sugestie.
sholsinger
1
Naprawdę, odkryłem, że „localhost” nie działa, przejście na adres IP 127.0.0.1 załatwiło sprawę.
OlliM
4
SpeedLimit nie działa od OS X 10.10, ponieważ narzędzie firewall, którego używa, zostało usunięte: github.com/mschrag/speedlimit/issues/13
Robin
Link do ograniczenia prędkości jest zepsuty.
Jeff Holt,
Źródło ograniczenia prędkości wydaje się teraz nieobsługiwane, ale jest dostępne tutaj i ma bardziej aktualne widelce , chociaż w ogóle go nie testowałem
Brad Parks
11

Aby dodać do zaakceptowanej odpowiedzi: wygląda na to, że nie powinieneś potrzebować XCode, tylko konto w witrynie Apple Developer (prostsze niż pierwsze pobranie pakietu 2 GB XCode, jeśli jeszcze go nie masz).

Wejdź na https://developer.apple.com/downloads i wyszukaj „Network Link Conditioner” lub „Additional Tools for XCode”, przy czym ten ostatni to nazwa pakietu, w którym się znajduje.

Aby pobrać go przez Xcode 8.x:

  • Kliknij menu Xcode
  • Wybierz Otwórz narzędzie programistyczne> Więcej narzędzi programistycznych ...
  • Spowoduje to otwarcie strony w witrynie developer.apple.com (Uwaga: może być konieczne wcześniejsze zalogowanie się)
  • Kliknij znak „+” obok pozycji Dodatkowe narzędzia dla Xcode 8.x
  • Kliknij adres URL pobierania
Roger Dueck
źródło
2
Witamy w Zapytaj inaczej! Zamiast pisać odpowiedź edycji odpowiedź kogoś innego, po prostu kliknij edytować lub poprawić tę odpowiedź przycisk poniżej postu, który chcesz poprawić .
grg
9

Jeśli potrzebujesz tylko ograniczenia w tworzeniu stron internetowych, z całego serca mogę polecić Charlesa . Jest to doskonałe narzędzie do debugowania aplikacji HTTP, a wśród wielu funkcji ma opcję przepustnicy. Oprogramowanie nie jest tanie, ale wykonuje świetną robotę.

Kiezpro
źródło
Właściwie potrzebuję go do symulatora iPhone'a .. i testowania połączeń z serwerem
aneuryzm
5

Użytkownicy systemu Mac OS X 10.10 lub nowszych trzeba używać dnctla pfctljednak udokumentowane przykłady użycia nie są łatwe do znalezienia.

# 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

Jeśli chcesz zrobić wszystko i ukształtować wszystko, czego możesz użyć:

echo "dummynet in quick proto tcp from any to any pipe 1" | sudo pfctl -a customRule -f -

Wierzę, że wpływa to również na potoki localhost, które spowolniły moje debugowanie vs-code, więc pamiętaj o tym.

ubershmekel
źródło
4

Możesz również użyć pipingu ipfw, aby spowolnić sieć.

Najpierw skonfiguruj wirtualny „potok”, aby ograniczyć przepływność do 800 KB / s:

ipfw pipe 1 config bw 800Kbit

Następnie możesz skonfigurować reguły, aby przepychać ruch przez tę rurę (rura 1). (porty 6881-6890 są ruchem bittorrent)

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

Oto kolejny przykład ograniczenia ruchu do 10 Kbit / s z określonego adresu IP:

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

(Źródło)

daviesgeek
źródło
ipfw został usunięty w OSX 10.10
Ben Wheeler
-1

W przypadku XCode 10.2 w sekcji Więcej narzędzi programistycznych - Dodatkowe narzędzia dla XCode 10.2 znajdziesz Network Link Conditioner.

Kiran Jasvanee
źródło
Czym różni się to rozwiązanie od udzielonych już odpowiedzi?
Nimesh Neema
Przez pomyłkę pobrałem narzędzia sprzętowe, nawet jeśli było to dla starej wersji XCode, myślałem, że zadziała, ponieważ nie widziałem go dla nowszej wersji. Nigdzie nie napisano, że dla nowego XCode 10.2 muszę wybrać Dodatkowe narzędzia, aby uzyskać najnowszą odżywkę do łącza sieciowego. Jest to wspomniane tutaj, aby inni programiści nie marnowali czasu. Jeśli okaże się, że nie różni się od innych, minus piętnaście razy. Zrobiłem to, aby inni mogli uzyskać pomoc w poszukiwaniu XCode 10.2
Kiran Jasvanee
Naprawdę pomógłby każdemu czytającemu tę odpowiedź, gdybyś mógł edytować swoją odpowiedź i dołączyć te kluczowe informacje. Ponadto wielu użytkowników uważa, że ​​jasne i szczegółowe instrukcje są bardzo cenne.
Nimesh Neema
@NimeshNeema Myślę, że cały programista wie w społeczności, że możesz znaleźć to narzędzie za pośrednictwem Więcej narzędzi programistycznych. Napisałem kroki. Nie sądzę, więc powinienem bardziej szczegółowo wspomnieć.
Kiran Jasvanee
Jest całkowicie w porządku i zależy od ciebie, jak zdecydujesz się napisać odpowiedź. Wspomniane są po prostu ogólnie przestrzegane praktyki, a nie reguły :)
Nimesh Neema