Trovo sia Andrei e le risposte di Tarek utile. Entrambi si affidano a un URL Web per interrogare "l'IP pubblico" del dispositivo iOS/OS X.
Tuttavia, c'è un problema con questo approccio in qualche parte del mondo in cui URL quale "http://www.dyndns.org/cgi-bin/check_ip.cgi" è censurato come nella risposta di andrei:
NSString *theIpHtml = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.dyndns.org/cgi-bin/check_ip.cgi"]
encoding:NSUTF8StringEncoding
error:&error];
In questo caso, avremo bisogno di utilizzare un URL "uncensored" all'interno della regione, come http://1212.ip138.com/ic.asp
Nota che l'URL web potrebbe utilizzare un diverso HTML e la codifica di quello che la risposta di Andrei in grado di analizzare - nell'URL sopra, alcuni cambiamenti molto gentile può risolvere il problema utilizzando kCFStringEncodingGB_18030_2000 per http://1212.ip138.com/ic.asp
NSURL* externalIPCheckURL = [NSURL URLWithString: @"http://1212.ip138.com/ic.asp"];
encoding:NSUTF8StringEncoding error:nil];
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *theIpHtml = [NSString stringWithContentsOfURL: externalIPCheckURL
encoding: encoding
error: &error];
Non possiamo trovare senza chiamata? –
Nel momento in cui l'ho esaminato non sono riuscito a trovare un altro modo ... – Andrei
Se con "IP pubblico" intendi "l'indirizzo IP che Internet mi vedrà come proveniente" allora non è possibile sapere senza chiedere parte di Internet. NAT non si verifica sul tuo dispositivo; si verifica sulla rete. Tieni presente che dispositivi diversi potrebbero vederti come aventi un IP diverso a seconda di come li indirizzi (inclusa la possibilità che alcuni possano vedere che hai un indirizzo IPv4 e altri che ti vedono con un indirizzo IPv6). "Internet" è solo una rete particolare; puoi essere attivo e instradare tra molte reti diverse con mappature IP diverse. –