2011-03-27 12 views
6

busqué algún código que me ayude a obtener la ip con la que se conecta el iphone.cómo obtener la IP externa en el objetivo c

Me parece ésta:

- (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; 
} 

pero el problema es que si lo entiendo IP 10.0.0.1

hay algún artículo de \ código de conseguir la IP externa.

gracias

+4

¿Qué tipo de dirección IP espera? Es probable que el dispositivo esté pasando por una red WiFi o 3G, etc., por lo tanto, es probable que no pueda recuperar ninguna forma de dirección IP "externa" significativa. –

+0

Middaparka tiene razón: desde el punto de vista del dispositivo, 10.0.0.1 * es * su dirección IP externa. –

Respuesta

4

La forma más fácil de obtener su dirección IP de Internet de código es utilizar NSURLConnection.

Para la URL que puede utilizar: http://www.whatismyip.com/m/mobile.asp o http://checkip.dyndns.com/

Sólo analizar los datos de retorno y tiene su dirección IP externa.

+1

Me gusta. No tanto para las aplicaciones de prueba, sino también para la depuración GREAT. +1 – Bastek

+0

A menos que tenga como 10m DAU y llame a esto cada lanzamiento, entonces realmente le costará a WhatIsMyIP.com MUCHO dinero en ancho de banda por algo que podría ser una función local. : o –

1

de Check PortMapper Apple, hace exactamente lo que quiere.

A partir de iOS7 esto es irrelevante.

+0

PortMapper es para "Requisitos de tiempo de ejecución: Mac OS X 10.5" –

+0

Lo estoy usando para mi aplicación de iPhone. – ssteinberg

+0

¿Tuviste que hacer cambios de código para el dispositivo iOS? –

Cuestiones relacionadas