如何在同一个wifi中获取其他设备的主机名?

问题描述:

我发现了一些可以扫描本地网络并列出所有设备信息的iOS应用程序。如何在同一个wifi中获取其他设备的主机名?

我想知道如何。

图片:enter image description here

+0

这使用Bonjour,苹果的MDNS实现,以前称为ZeroConf。 – Cyrille 2014-09-23 11:42:40

第1步 - 凝胶本地IP

对于iOS 7,下

#include <ifaddrs.h> 
#include <arpa/inet.h> 

- (NSString *)getIPAddress { 

    NSString *address = @"error"; 
    struct ifaddrs *interfaces = NULL; 
    struct ifaddrs *temp_addr = NULL; 
    int success = 0; 
    // retrieve the current interfaces - returns 0 on success 
    success = getifaddrs(&interfaces); 
    if (success == 0) { 
     // Loop through linked list of interfaces 
     temp_addr = interfaces; 
     while(temp_addr != NULL) { 
      if(temp_addr->ifa_addr->sa_family == AF_INET) { 
       // Check if interface is en0 which is the wifi connection on the iPhone 
       if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) { 
        // Get NSString from C String 
        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 

       } 

      } 

      temp_addr = temp_addr->ifa_next; 
     } 
    } 
    // Free memory 
    freeifaddrs(interfaces); 
    return address; 

} 

的iOS 8

[[NSHost currentHost] address] 

第2步 - 获取网上的IP

https://github.com/tonymillion/Reachability
使用可达性,您可以获得子网IP的可达性。

Reachability* reach = [Reachability reachabilityWithHostname:subnetIp]; 

第3步 - 解析主机名

苹果有一个伟大的文章,它涵盖HostnameResolving主题。 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/ResolvingDNSHostnames.html

您可以尝试在iOS8上也比较简单变种

[[NSHost hostWithAddress:@"173.194.34.24"] name] 

示例项目

https://github.com/mongizaidi/LAN-Scan
这里是一个小项目,这确实对局域网进行扫描,你只需要解决主机名,你会得到你想要的结果。

+1

NSHost现在可以在iOS 8上公开使用吗?如果是的话,我会惊讶,但我没有在文档或基金会标题中找到它... – macshome 2015-01-16 22:07:03

+0

是[[NSHost hostWithAddress:@“your_ip_address”] name]可用于iPhone应用程序吗?如果是,那我该如何使用它? – 2015-09-18 19:41:39

+0

NSHost仅适用于OsX – 2016-10-11 21:42:01