5 votes

Comment puis-je obtenir le nom de l'interface de l'AirPort de manière programmatique et fiable ?

J'ai besoin du nom en0, en1, enN, enWhatever de mon aéroport dans un script.

Comment l'obtenir de manière fiable ?

Voici ce que j'ai mis en place, mais c'est moche et fragile car c'est du "parsing" de texte :

airport_hardware_name='Hardware Port: Wi-Fi'
networksetup -listallhardwareports | awk -v p="$airport_hardware_name" '$0 ~ p { getline; print $2; }'

5voto

Si vous devez prendre en charge d'anciennes versions d'OS X, le service de réseau Wi-Fi s'appelait Airport dans les versions 10.6 et antérieures.

networksetup -listallhardwareports | awk '/^Hardware Port: (Wi-Fi|AirPort)$/{getline;print $2}'

Vous pouvez également utiliser -listnetworkserviceorder :

networksetup -listnetworkserviceorder | sed -En 's/^\(Hardware Port: (Wi-Fi|AirPort), Device: (en.)\)$/\2/p'

Ou lire /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist :

ruby -e 'require "plist";puts Plist::parse_xml("/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist")["Interfaces"].select{|i|i["SCNetworkInterfaceType"]=="IEEE80211"}[0]["BSD Name"]'

1voto

markhunte Points 11634

Qu'en est-il

/usr/sbin/networksetup -listnetworkserviceorder | grep -i 'Wi-Fi\|AirPort' | grep -iow en.

1voto

Shawn Anderson Points 542

En jouant sur le thème de Lauri selon lequel Apple pourrait changer le nom des dispositifs Wi-Fi à un moment donné dans le futur :

for d in `networksetup -listallhardwareports | awk '/^Device:/{print $2}'`; do
  networksetup -getairportpower $d > /dev/null 2>&1 && echo "Wi-Fi Device: ${d}"
done

Puisque 'networksetup -getairportpower dev' renvoie une valeur non nulle si dev n'est pas un périphérique d'aéroport, nous pouvons trouver celui ou ceux qui fonctionnent.

1voto

moodforaday Points 2633

Dans le seul but de compléter les réponses (sans suggérer qu'il y a quelque chose de mal dans les autres réponses, mais seulement pour montrer qu'il y a une autre façon de faire), j'ajouterai ceci :

Utilisez le airport trouvée à l'adresse suivante

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport

qui existe depuis au moins 10.6. (Je le lie toujours à /usr/local/bin/ chaque fois que je configure un nouveau Mac).

L'un des avantages de la airport est que vous n'avez pas besoin de savoir quelle est l'interface, parce que :

"Si une interface n'est pas spécifiée, l'aéroport utilisera la première interface AirPort du système."

Par conséquent, si je lance cette commande :

airport prefs 2>&1

J'obtiens ce résultat :

AirPort preferences for en1:

DisconnectOnLogout=NO
Unable to retrieve JoinMode
Unable to retrieve JoinModeFallback
RememberRecentNetworks=NO
RequireAdminIBSS=NO
RequireAdminNetworkChange=NO
RequireAdminPowerToggle=NO
WoWEnabled=YES

ce qui signifie que je peux obtenir le nom du port/dispositif en cherchant le dernier mot de la première ligne, sans les deux points.

airport prefs 2>&1 | awk -F' ' '/for/{print $NF}' | tr -d ':'

0voto

moodforaday Points 2633

J'ai accidentellement trouvé un autre moyen de le faire :

networksetup -setairportpower enX off 2>&1 | awk -F' ' '/:/{print $NF}'

Comment/pourquoi cela fonctionne :

networksetup -setairportpower enX off

donne ce résultat :

enX n'est pas une interface Wi-Fi.

Désactiver la seule interface aéroportuaire trouvée : en1

Je ne suis pas sûr que je le classerais parmi les meilleurs en termes de fiabilité mais je l'inclus ici comme une option.

(Fonctionne sur 10.8.3.)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X