2017-01-11 11 views
8

Ağın ethernet'ten kablosuz ağa (veya wifi'den ethernet'e) ne zaman değiştiğini bulmak istiyorum. Bu değişiklik hakkında beni bilgilendirmek için bir gözlemciye sahip olmak istiyorum.Ethernet/wifi ağını algıla değiştirme

ulaşılabilirlik yeterince iyi değil - her iki durumda da her zaman ReachableViaWiFi değerini döndürür.

PS - Orada önce bu konu ile ilgili bazı sorular vardı, ama bunların hiçbiri iyi bir cevap vardır ve o sorular bir yıl büyüksün olduğundan, belki birisi zaten

+1

Her ikisine de bağlıysanız ne olur? – Sulthan

+0

Eğer MacOS – frank

cevap

2

You nasıl yapılacağını bulmak İlgilendiğiniz arabirimleri izleyen ve değiştiklerinde bir şey başlatan launchd altında biraz bash betiği çalıştırabilir. Sen SystemConfiguration modülü aracılığıyla sistem ağ tercihlerini erişebilir netmon olarak

./netmon en0 

Kaydet bu senaryo ve chmod +x netmon

#!/bin/bash 
interface=$1 

# Get current status of interface whose name is passed, e.g. en0 
status(){ 
    ifconfig $1 | awk '/status:/{print $2}' 
} 

# Monitor interface until killed, echoing changes in status 
previous=$(status $interface) 
while :; do 
    current=$(status $interface) 
    if [ $current != $previous ]; then 
     echo $interface now $current 
     previous=$current 
    fi 
    sleep 5 
done 
+0

üzerinde programlama yapıyorsanız, CoreWLAN framework'ü düşünebilirsiniz. Ancak, uygulamada wifi/ethernet algılamayı eklemek istiyorum, böylece kullanıcı uygulamayı çalıştırdığında, uygulama arayüz değişikliği ile ilgili bildirimler alacak ve bazı işlemler yapacak . – Roee84

+0

Bu yüzden, betiğimi çalıştıran ve çıktısını okuyan ve buna göre hareket eden yeni bir iş parçacığı başlatın. –

5

ile çalıştırılabilir yapın:

kaçabilirsin, kablolu bağlantı en0 Say sistem tercihleri ​​deposuna dokunmanıza yardımcı olan şu anda varsayılan konumda /Library/Preferences/SystemConfiguration/preferences.plist bulunur.

O zamandan beri, SCDynamicStore tarafından SCDynamicStoreNotifyValue(_:_:) numaralı bildirimleri alabilir veya SCDynamicStoreCopyValue(_:_:) numaralı telefonu geri alabilirsiniz. doğrudan geçerli birincil ağ hizmeti arama için

Örnek:

:

var store = SCDynamicStoreCreate(nil, "Example" as CFString, nil, nil) 
var global = SCDynamicStoreCopyValue(store, "State:/Network/Global/IPv4" as CFString)! 

var pref = SCPreferencesCreate(nil, "Example" as CFString, nil) 
var service = SCNetworkServiceCopy(pref!, global["PrimaryService"] as! CFString) 
var interface = SCNetworkServiceGetInterface(service!) 

SCNetworkInterfaceGetInterfaceType(interface!) /// Optional("IEEE80211") -> Wi-Fi 

Ya geri arama ile dinamik mağaza oluşturabilir ve set bildirim tuşları her zaman birincil ağ hizmeti olarak bildirimler almak için bildirim yangın gidiyor değiştirir

var callback: SCDynamicStoreCallBack = { (store, _, _) in 
    /* Do anything you want */ 
} 
var store = SCDynamicStoreCreate(nil, "Example" as CFString, callback, nil) 
SCDynamicStoreSetNotificationKeys(store!, ["State:/Network/Global/IPv4"] as CFArray, nil) 
+0

Teşekkürler, ancak uygulamamda wifi/ethernet algılamayı eklemek istiyorum, böylece kullanıcı uygulamayı çalıştırdığında, uygulama arayüz değişikliği ile ilgili bildirim alacak ve bazı eylemler gerçekleştirecek. – Roee84

+0

@ Roee84 Bildirim örneklerini dahil etmek için cevabı güncelledim :) – Legendecas