Как получить IP-адрес устройства iOS при подключении к сети Hotspot (или ad ho c)? - PullRequest
0 голосов
/ 06 марта 2020

Существует множество ссылок, таких как this , предлагающих, как получить IP-адрес устройства ios. Это работает хорошо, но не тогда, когда устройство iOs подключено к Hotspot.

Во-первых, если я распечатываю текущее имя SSID, то это сообщает правильно.

#import <SystemConfiguration/CaptiveNetwork.h>

+ (NSString *)fetchSSIDInfo {
    NSString *currentlyConnectedSsid = nil;
    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
    for (NSString *ifnam in ifs) {
        NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
        if (info[@"SSID"]) {
            currentlyConnectedSsid = info[@"SSID"];
        }
    }
    return address;
}

Теперь, когда вышеупомянутая функция сообщает правильный SSID, я использую следующий код для получения IP-адреса устройства iOS, когда оно подключено к точке доступа.

- (NSString *)getIPAddress
{    
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    NSString *wifiAddress = nil;
    NSString *cellAddress = nil;

    // retrieve the current interfaces - returns 0 on success
    if(!getifaddrs(&interfaces)) {
        // Loop through linked list of interfaces
        temp_addr = interfaces;
        while(temp_addr != NULL) {
            sa_family_t sa_type = temp_addr->ifa_addr->sa_family;
            if(sa_type == AF_INET || sa_type == AF_INET6) {
                NSString *name = [NSString stringWithUTF8String:temp_addr->ifa_name];
                NSString *addr = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; // pdp_ip0     
                NSLog(@"NAME: \"%@\" addr: %@", name, addr); // see for yourself

                if([name isEqualToString:@"en0"]) {
                    // Interface is the wifi connection on the iPhone
                    wifiAddress = addr;    
                } else
                if([name isEqualToString:@"pdp_ip0"]) {
                    // Interface is the cell connection on the iPhone
                    cellAddress = addr;    
                }
            }
            temp_addr = temp_addr->ifa_next;
        }
        // Free memory
        freeifaddrs(interfaces);
    }
    NSString *addr = wifiAddress ? wifiAddress : cellAddress;
    return addr ? addr : @"0.0.0.0";
} 

Выше кода получает IP-адрес Wi-Fi, а не горячей точки это связано. Если я go в настройках и проверить IP-адрес, он не совпадает с IP-адресом, который возвращает этот метод.

Вопрос:
Не логичен ли лог c в getIPAddress для получения IP-адреса, когда устройство iOS подключено к Hotspot?

Я бегу iOS 13.3.1

...