Как получить имя хоста других устройств в том же Wi-Fi?

Я нашел приложение для iOS, которое может сканировать локальную сеть и выводить всю информацию об устройстве.

Я удивляюсь, как.

Pic:

1 ответ

Решение

Шаг 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
Используя Reachability, вы можете получить доступность IP подсети.

Reachability* reach = [Reachability reachabilityWithHostname:subnetIp];

Шаг 3 - Разрешить имя хоста

У Apple есть отличная статья, которая охватывает темы 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
Вот небольшой проект, который выполняет сканирование локальной сети, вам нужно только разрешить имена хостов, и вы получите желаемый результат.

Другие вопросы по тегам