2010-08-26 19 views
2

Je peux obtenir l'adresse IP actuelle de mon appareil/machine que j'utilise - par using this question's answer.Comment obtenir le nom de domaine de l'adresse IP et l'adresse IP du nom de domaine dans Objective C?

J'ai traversé this question. Java permet d'obtenir l'adresse IP d'un nom de domaine. Est-ce possible en Objective C? Comment?

La deuxième question est Comment obtenir le nom de périphérique/machine en utilisant son adresse IP. Dites par exemple que j'ai une adresse IP 192.168.0.74 = Quel est le nom de l'appareil? en Objective C?

Répondre

2

Je ne sais pas si c'est la meilleure façon de le faire, mais ça marche pour moi, surtout. J'ai mis dans les adresses IP de StackOverflow (69.59.196.211) et il m'a donné stackoverflow.com, mais j'ai mis dans l'une des adresses IP de Google (210.55.180.158) et il m'a renvoyé cache.googlevideo.com (pour tous les résultats, pas seulement le premier).

int error; 
struct addrinfo *results = NULL; 

error = getaddrinfo("69.59.196.211", NULL, NULL, &results); 
if (error != 0) 
{ 
    NSLog (@"Could not get any info for the address"); 
    return; // or exit(1); 
} 

for (struct addrinfo *r = results; r; r = r->ai_next) 
{ 
    char hostname[NI_MAXHOST] = {0}; 
    error = getnameinfo(r->ai_addr, r->ai_addrlen, hostname, sizeof hostname, NULL, 0 , 0); 
    if (error != 0) 
    { 
     continue; // try next one 
    } 
    else 
    { 
     NSLog (@"Found hostname: %s", hostname); 
     break; 
    } 
} 

freeaddrinfo(results); 

Il peut y avoir plusieurs noms pour l'adresse, de sorte que vous ne voulez pas arrêter à la première que vous trouvez.

+0

pouvons-nous obtenir IP à partir du nom de domaine? – Niks

+0

@Niks: Oui, 'getaddrinfo' peut être utilisé pour obtenir l'adresse IP d'un nom de domaine. – dreamlax

+0

Merci pour la réponse, laissez-moi vérifier avec ça. – Niks

0

Vous devez lire la table de routage - fondamentalement de la même manière que la commande "netstat -r". La mise en œuvre netstat est opensource - il est dans le paquet

network_cmds-396,6

à

http://www.opensource.apple.com/release/mac-os-x-1082/

vous pouvez donc vérifier ce qu'il fait. La passerelle par défaut contient le drapeau "G" mais ne doit pas connecter le drapeau "I" (lorsque le wifi et la cellule sont actifs, le wifi est utilisé pour la connexion internet - la passerelle cellulaire n'est pas utilisée et reçoit le drapeau "I") .

Espérons que ça aide.

+0

non je suis désolé. C'était pour moi compliqué. – J0k3R