8
votes

Trouver l'adresse IP dans iPhone

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: xxx pré>

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]; 


1 commentaires

Le plus facile (IMHO) est juste d'aller chercher la propriété intellectuelle externe à partir d'un site Web, plutôt à interroger l'interface.


8 Réponses :


4
votes

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:

http://iphonesdksnippets.com /post/2009/09/07/get-ge-ip-address-of-iphone.aspx

[Nshost CurrentHost] 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.


1 commentaires

Qu'en est-il d'IPv6? Y a-t-il un exemple de code sur la façon de la récupérer?



1
votes

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?

[Uidevice CurrentDevice] .niqueIdentifier


0 commentaires

3
votes
#include <ifaddrs.h>
#include <arpa/inet.h>

1 commentaires

EN0 retourné 127.0.0.1 pour moi sur mon iPad3, je devais utiliser EN1 ... Je ne sais pas comment permanent ce correctif est ...



1
votes

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);


0 commentaires

0
votes
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;
    }
}

0 commentaires

6
votes
#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];
}

1 commentaires

belle solution. semble le meilleur



1
votes

Vous devriez avoir un coup d'œil à ce bon projet: uidevice-extension

Spécialy cette classe

importer uidevice-accompagnabilité.h Dans votre projet, essayez ensuite avec l'une de ces commandes : xxx


3 commentaires

@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



4
votes

Mettez ce script sur un serveur Web exécutant PHP: xxx

appelez ceci sur le périphérique: xxx


1 commentaires

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