Je veux trouver une adresse IP dans une application. Je suis capable de le trouver. Mais, le problème est que cela fonctionne des ailettes dans l'iPhone OS 2.0. Mais, dans iPhone OS 3.0, il me donne un avertissement: J'utilise ce code, et cela fonctionne bien avec OS version 2.0. P> -(NSString*)getAddress {
char iphone_ip[255];
strcpy(iphone_ip,"127.0.0.1"); // if everything fails
NSHost* myhost = [NSHost currentHost];
if (myhost)
{
NSString *ad = [myhost address];
if (ad)
strcpy(iphone_ip,[ad cStringUsingEncoding: NSISOLatin1StringEncoding]);
}
return [NSString stringWithFormat:@"%s",iphone_ip];
8 Réponses :
Autant que je sache, il n'y a qu'un seul chemin hacky de le faire. Vous ouvrez essentiellement une prise et obtenez son adresse à l'aide de fonctions POSIX. Voici le code que j'ai utilisé pour cela: p>
http://iphonesdksnippets.com /post/2009/09/07/get-ge-ip-address-of-iphone.aspx P>
[Nshost CurrentHost] code> fonctionnera également, mais il est obsolète et considéré comme une "API privée" d'Apple, vous ne pourrez donc pas soumettre votre candidature à l'App Store. P >
Qu'en est-il d'IPv6? Y a-t-il un exemple de code sur la façon de la récupérer?
Obtenir l'adresse IP est un peu hacky. Êtes-vous sûr de ne pas pouvoir vivre avec l'ID de périphérique (UDID) unique à chaque iPhone et peut être récupéré facilement via l'API publique? p>
[Uidevice CurrentDevice] .niqueIdentifier code> p>
#include <ifaddrs.h> #include <arpa/inet.h>
EN0 code> retourné
127.0.0.1 code> pour moi sur mon iPad3, je devais utiliser
EN1 code> ... Je ne sais pas comment permanent ce correctif est ...
Il existe une autre façon d'obtenir l'adresse IP et que trop global IP
NSString* ip=@"http://www.whatismyip.org/"; NSURL *url = [[NSURL alloc] initWithString:ip]; NSString *ans = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error]; NSLog(@"%@",ans);
bool success; struct ifaddrs *addrs; const struct ifaddrs *cursor; const struct sockaddr_dl *dlAddr; const uint8_t *base; int i; success = getifaddrs(&addrs) == 0; if (success) { cursor = addrs; while (cursor != NULL) { if ( (cursor->ifa_addr->sa_family == AF_LINK) && (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type ==IFT_ETHER) ) { dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr; // fprintf(stderr, " sdl_nlen = %d\n", dlAddr->sdl_nlen); // fprintf(stderr, " sdl_alen = %d\n", dlAddr->sdl_alen); base = (const uint8_t *) &dlAddr->sdl_data[dlAddr->sdl_nlen]; printf(" MAC address "); for (i = 0; i < dlAddr->sdl_alen; i++) { if (i != 0) { printf(":"); } printf("%02x", base[i]); } printf("\n"); } cursor = cursor->ifa_next; } }
#include <arpa/inet.h> #include <netdb.h> #include <net/if.h> #include <ifaddrs.h> // retun the host name + (NSString *)hostname { char baseHostName[256]; int success = gethostname(baseHostName, 255); if (success != 0) return nil; baseHostName[255] = '\0'; #if !TARGET_IPHONE_SIMULATOR return [NSString stringWithFormat:@"%s.local", baseHostName]; #else return [NSString stringWithFormat:@"%s", baseHostName]; #endif } // return IP Address + (NSString *)localIPAddress { struct hostent *host = gethostbyname([[self hostname] UTF8String]); if (!host) {herror("resolv"); return nil;} struct in_addr **list = (struct in_addr **)host->h_addr_list; return [NSString stringWithCString:inet_ntoa(*list[0]) encoding:NSUTF8StringEncoding]; }
belle solution. semble le meilleur
Vous devriez avoir un coup d'œil à ce bon projet: uidevice-extension
Spécialy cette classe p>
importer uidevice-accompagnabilité.h Dans votre projet, essayez ensuite avec l'une de ces commandes : p>
@Nikita P Vous devez importer la classe Uidevice-accessibilité.m, alors vous pourrez appeler ces fonctions. Et oui ils sont publics
Merci. Je voulais juste savoir si je peux les utiliser sur des applications d'App-Store
Comme cette classe utilise la fonction publique seulement, vous pouvez les utiliser sur l'App Store
Mettez ce script sur un serveur Web exécutant PHP: appelez ceci sur le périphérique: p>
Nice, mais cela ne fonctionne pas sans connexion Internet. Et c'est un peu dans le but, puisque vous voulez normalement l'adresse IP locale
Le plus facile (IMHO) est juste d'aller chercher la propriété intellectuelle externe à partir d'un site Web, plutôt à interroger l'interface.