„Tryb samolotowy” w OS X. Alternatywne polecenie dla „rfkill”?

9

Mac OS X nie rozpoznaje rfkillpo swoim terminalu i szukam alternatywnego polecenia o podobnej funkcjonalności (przełączanie „trybu samolotowego”).

UWAGA: Nie chcę otwierać .appprzełącznika. Chciałbym wykonać polecenie z wiersza poleceń lub w skrypcie w Bash (lub odpowiednikach).


Przez „Tryb samolotowy”, chciałem pożyczyć termin od strony wsparcia iOS tutaj . Chciałbym wyłączyć całą przychodzącą / wychodzącą komunikację sieciową z mojego systemu.

melvynkim
źródło

Odpowiedzi:

10

Utwórz lokalizację ad hoc o nazwie isolatedlub w airplanektórej wszystkie interfejsy sieciowe są obecne i wyłączone .

Przełącz się na tę głuchą lokalizację za pomocą:

networksetup -switchtolocation isolated

Może to być bardziej interesujące niż to, rfkillże możesz chronić cię przed niezauważonym kablem Ethernet, który może słuchać całej twojej komunikacji (a jest ich dużo): [. Aby sprawdzić, czy wszystko jest naprawdę wyłączone, uruchom:

ifconfig -a | grep '[<,]UP[,>]' | grep -v '[<,]LOOPBACK[,>]'

Jeśli to polecenie niczego nie wyświetla, oznacza to, że wszystkie interfejsy są wyłączone , wszystko jest w porządku.

Jeśli to polecenie wypisuje cokolwiek, jak tutaj:

en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500

oznacza to, że nazwa interfejsu (tutaj en1bezprzewodowego na tym komputerze Mac) jest tam, gdzie nie powinna. Jest to znak, że konfiguracja się nie powiedzie lub że jakiś koń trojański włączył ją, aby uzyskać dostęp do serwera kontrolnego przez Internet.

dan
źródło
6

W zależności od mojego celu (czy powinienem również martwić się o wyłączenie interfejsu danych?) Mogę odpowiednio wybrać plan:

Plan A dla (1) interfejsów sieciowych i (2) interfejsu danych

Plan B dla (1) interfejsów sieciowych


(Plan A # 1) Uzyskaj informacje o zainstalowanych interfejsach sprzętowych (w tym interfejsach danych):

Po pierwsze, chciałbym wiedzieć, o ile interfejsów mam się martwić.

$ networksetup -listallhardwareports

Hardware Port: Bluetooth DUN
Device: Bluetooth-Modem
Ethernet Address: N/A

Hardware Port: Ethernet
Device: en0
Ethernet Address: ff:ff:ff:ff:ff:ff

Hardware Port: FireWire
Device: fw0
Ethernet Address: ff:ff:ff:ff:ff:ff:ff:ff

Hardware Port: Wi-Fi
Device: en1
Ethernet Address: ff:ff:ff:ff:ff:f

(Plan A #?) (Opcjonalnie) Uzyskaj tylko listę interfejsów sieciowych:

Ten krok ułatwia mi grep.

$ networksetup -listallnetworkservices

An asterisk (*) denotes that a network service is disabled.
Ethernet
FireWire
Wi-Fi

(Plan A # 2) Uzyskaj nazwę urządzenia interfejsów sieciowych.

Chciałbym wiedzieć, które interfejsy sieciowe są aktywne.

$ ifconfig

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether ff:ff:ff:ff:ff:ff 
    media: autoselect (none)
    status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether ff:ff:ff:ff:ff:ff 
    inet6 ffff::ffff:ffff:ffff:ffff%en1 prefixlen 64 scopeid 0x5 
    inet 192.168.1.fff netmask 0xffffff00 broadcast 192.168.1.fff
    media: autoselect
    status: active
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
    lladdr ff:ff:ff:ff:ff:ff:ff:ff 
    media: autoselect <full-duplex>
    status: inactive

(Plan B # 1) Znajdź airportpolecenie lub ustaw alias dla airportpolecenia, jeśli nie zostanie rozpoznany:

Mój system nie mógł rozpoznać airportpolecenia, więc musiałem dodać poniżej wiersza .bash_profile.

alias airport='/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport'

(Plan B # 2) Sprawdź aktualny status AirPort:

$ ./airport -I

     agrCtlRSSI: -10
     agrExtRSSI: 0
    agrCtlNoise: -10
    agrExtNoise: 0
          state: running
        op mode: station 
     lastTxRate: 100
        maxRate: 100
lastAssocStatus: 0
    802.11 auth: open
      link auth: fffffffffffffffff
          BSSID: ff:ff:ff:ff:ff:ff
           SSID: MelvNetwork
            MCS: 15
        channel: 6 

(Plan A i B # 3) Włączanie / wyłączanie AirPort:

# For OS X 10.7 and later
$ networksetup -setairportpower en1 on   # Turn on Airport
$ networksetup -setairportpower en1 off  # Turn off Airport

# for OS X 10.6 and below
$ networksetup -setairportpower on       # Turn on AirPort
$ networksetup -setairportpower off      # Turn off AirPort

(Plan A i B # 4) Włączanie / wyłączanie BlueTooth:

Pobierz blueutil tutaj .

$ blueutil status  # Check status of BlueTooth
Status: on

$ blueutil on      # Turn BlueTooth on

$ blueutil off     # Turn BlueTooth off

Scenariusz:

Teraz, gdy mam już wszystkie składniki, mogę napisać skrypt dla OS X 10.7!


Ostatnie komentarze:

(1) Niektóre dane wyjściowe są maskowane znakiem „f”.

(2) Zgodnie z $ man networksetup, możesz również skonfigurować proxy, TCP / IP, PPPoE (nie testowane).

(3) Sugestia @ RichHomolka networksetup --enableuserprofilejest przestarzała dla OS X 10.7 (nie testowana w innych wersjach).

(4) Jeśli ktoś postępujący zgodnie z powyższą procedurą napotka problem, czy mógłbyś rozwiązać go w komentarzu (lub jak w osobnej odpowiedzi)?

melvynkim
źródło
1
Witamy na stronie i dziękuję za analizę. Jedynym brakującym fragmentem w twojej odpowiedzi (i jedyną rzeczą, której będą poszukiwać przyszli goście) jest skrypt łączący wszystkie ustalenia w rozwiązanie. Czy możesz to również dodać?
nohillside
1
@patrix Jeszcze nie skończyłem pisać skryptu i (myślę), opublikowanie tutaj może trochę potrwać ... Zamiast tego planuję opublikować go na githubie. Później zaktualizuję adres do github. Dzięki za powitanie!
melvynkim
1
Cześć Melv! Usunąłem twoje pytanie na Super User, ponieważ dosłowne krzyżowanie postów jest zdecydowanie zabronione. Byłoby dobrze pozostać na obu stronach, tylko dla twojej informacji.
slhck