2016-02-29 52 views
4

我在寫一些代碼,試圖找出服務在網絡接口上的可能性。我正在搜索的硬件沒有實現SSDP或mDNS,所以我必須手動查找它。如何在iOS和Mac OS X上查找接口的硬件類型?

設備通過WiFi連接到網絡,所以很可能我會通過WiFi接口找到它。但是,Mac可以通過以太網連接到WiFi網橋,因此可以通過該網橋進行解析。

爲了避免不必要的請求,併成爲一個好網絡公民,我想知道首先嚐試哪個接口。

我可以在我的電腦上獲得接口列表沒有問題,但這沒什麼幫助:en0在我的iMac上連接了以太網,但在我的Macbook上連接了WiFi。

獎勵積分,如果這也適用於iOS,因爲雖然很少見,但可以使用USB以太網適配器。

+0

在命令行中看起來像'networksetup -listallhardwareports'會爲您的每個內置接口提供一種人類可讀的類型。但是,它會漏掉任何通過USB連接的東西。 http://osxdaily.com/2014/09/03/list-all-network-hardware-from-the-command-line-in-os-x/ –

回答

3

使用SystemConfiguration框架:

import Foundation 
import SystemConfiguration 

for interface in SCNetworkInterfaceCopyAll() as NSArray { 
    if let name = SCNetworkInterfaceGetBSDName(interface as! SCNetworkInterface), 
     let type = SCNetworkInterfaceGetInterfaceType(interface as! SCNetworkInterface) { 
      print("Interface \(name) is of type \(type)") 
    } 
} 

在我的系統,這個打印:

Interface en0 is of type IEEE80211 
Interface en3 is of type Ethernet 
Interface en1 is of type Ethernet 
Interface en2 is of type Ethernet 
Interface bridge0 is of type Bridge 
0

沒有太多的Mac開發者,但在iOS我們可以使用蘋果提供的Reachability類。

Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
[reachability startNotifier]; 

NetworkStatus status = [reachability currentReachabilityStatus]; 

if(status == NotReachable) 
{ 
    //No Connection 
} 
else if (status == ReachableViaWiFi) 
{ 
    //WiFi Connection 
} 
else if (status == ReachableViaWWAN) 
{ 
    //Carrier Connection 
} 
0

直行在C:(作爲獎金獲取IP)

@implementation NetworkInterfaces 

+(void)display{ 
    struct ifaddrs *ifap, *ifa; 
    struct sockaddr_in *sa; 
    char *addr; 

    getifaddrs (&ifap); 
    for (ifa = ifap; ifa; ifa = ifa->ifa_next) { 
     if (ifa->ifa_addr->sa_family==AF_INET) { 
      sa = (struct sockaddr_in *) ifa->ifa_addr; 
      addr = inet_ntoa(sa->sin_addr); 
      printf("Interface: %s\tAddress: %s\n", ifa->ifa_name, addr); 
     } 
    } 

    freeifaddrs(ifap); 
} 
@end 
(或AppDelegate)中的

(SWIFT)

NetworkInterfaces.display() 

(objC) [NetworkInterfaces顯示];