2009-10-20 5 views
0

J'écris actuellement un plugin MobileSubstrate (injection de code pour iPhone). Il obtient le nom d'hôte en accrochant dans connect() et ce morceau de code:iPhone, C/objC: obtenir nom d'hôte (pas en résolvant de IP) en accroissant dans les fonctions du système?

#ifndef NI_MAXHOST 
#define NI_MAXHOST 1025 
#endif 

int error; 

char hostname[NI_MAXHOST] = ""; 


error = getnameinfo(serv_addr, addrlen, hostname, NI_MAXHOST, NULL, 0, 0); 

if (error !=0) { 
    ALogTCP(@"coudldn't resolve hostname or internal connect"); 

    return orig__connect(sockfd, serv_addr, addrlen); 
    } 


if (error == 0) { 
    ALogTCP(@"hostname: %s", hostname); 
    NSString *hostFirst = [NSString stringWithCString:hostname]; 
} 

Maintenant, je l'ai remarqué que certains noms d'hôtes ne seront pas correctement résolus (mauvais hôte: comme connect.xyz.com au lieu de irc .xyz.com) (en fonction du serveur DNS).

Je ne suis pas très habitué à toutes les fonctions de mise en réseau et une recherche approfondie n'a pas trouvé de solution .: Je pense à accrocher dans une fonction qui est responsable de toutes les conversions "hostname-> IP" , obtenir le nom d'hôte et l'utiliser plus tard dans le code ci-dessus. Y a-t-il une telle fonction? et comment s'appelle-t-il?

Merci beaucoup d'avance.

+0

C'est une question assez déroutant. Si rien n'est capable de résoudre votre IP dans un nom d'hôte, alors il n'en a tout simplement pas un qui soit assez significatif pour vous inquiéter. Demandez-vous le nom que Bonjour s'attribue automatiquement? –

+0

non, je demande à propos de la fonction C qui est responsable de la résolution des noms d'hôte à IP. parce que je veux m'y accrocher (injecter le code) Par exemple, si une application utilise NSURLConnection, en arrière-plan, connect() est utilisé pour établir la connexion (que je suis déjà en train d'accrocher) mais avant connect() le nom d'hôte doit être résolu en IP (pour servaddr) Je veux savoir quelle fonction fait cela pour que je puisse y entrer aussi – Yllier

+0

La réponse courte est qu'il n'y a pas de fonction "un" qui fait cela, ni aucune exigence qu'une application utilise le système fourni ' – johne

Répondre

1

voilà comment je finalement l'ai fait, m'a pris seulement environ 7 heures pour le comprendre: D

  1. accrochage dans CFHostCreateWithName (CFAllocatorRef * allocateur, nom d'hôte CFStringRef *)

  2. après J'utilise gethostbyname pour obtenir l'adresse IP.

maintenant je peux comparer cette information avec celle que je récupère en accrochant dans connect()

Questions connexes