@ Ответ DavidH работает, пока я не получу такой результат от какой-то сотовой сети 4G:
{
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "10.132.76.168";
"utun0/ipv6" = "fe80::72c3:e25e:da85:b730";
}
Я не использую vpn, поэтому понятия не имею, почему у меня был utun0 / ipv6.
--- Обновлено ---
Я также отладил эту проблему и обнаружил, что могу получить поддельный vpn-адрес даже в других сетях 4G (это ошибка iOS?),
{
""awdl0/ipv6"" = ""fe80::c018:9fff:feb2:988"";
""en0/ipv6"" = ""fe80::181a:2e43:f91b:db2b"";
""lo0/ipv4"" = ""127.0.0.1"";
""lo0/ipv6"" = ""fe80::1"";
""pdp_ip0/ipv4"" = ""10.48.10.210"";
""utun0/ipv4"" = ""192.168.99.2"";
}
Если я использовал vpn, я получу это:
{
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "10.49.187.23";
"utun0/ipv6" = "fe80::5748:5b5d:2bf0:658d";
"utun1/ipv4" = "192.168.99.2"; //the real one
}
Так что это utun1 НЕ utun0
Не понимая, почему мне просто нужно сбросить проверку vpn: (
---- обновление ----
Я поднял ошибку (28131847) в apple и ответил: «Не все интерфейсы utun предназначены для VPN. Существуют другие функции ОС, использующие интерфейсы utun».
Но когда я спросил, как получить действительный IP-адрес vpn, его ответ был довольно разочарован: «Вы можете перейти в Настройки -> VPN и посмотреть вашу конфигурацию VPN, чтобы увидеть, активна ли VPN. В некоторых случаях вы также можно увидеть назначенный IP-адрес. Мы закрываем этот отчет об ошибках. " (
---- обновление 2016/11/04 ----
Я снова столкнулся с проблемой, и мне нужно еще изменить @ DavidH ответ, чтобы исправить это:
Я был в сети 4G и получил этот адрес:
addresses: {
"awdl0/ipv6" = "fe80::98fd:e6ff:fea9:3afd";
"en0/ipv6" = "fe80::8dd:7d92:4159:170e";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "10.37.212.102";
"utun0/ipv6" = "fe80::279c:ea56:a2ef:d128";
}
С его первоначальным ответом я получу wifi IP fe80 :: 8dd: 7d92: 4159: 170e, который был фальшивым, и соединение не удалось.
Итак, я изменил код, чтобы понравиться,
[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)
{
if ((internetReach.isReachableViaWiFi && [key hasPrefix:IOS_WIFI]) ||
(internetReach.isReachableViaWWAN && [key hasPrefix:IOS_CELLULAR])) {
address = addresses[key];
if(address) *stop = YES;
}
} ];