Существует множество ссылок, таких как 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