comment recuperer le hostname d'un serveur distant à  partir de son addresse IP

PisixPisix Membre
mars 2013 modifié dans API UIKit #1
Bonsoir,

j'essai de determiner le hostname d'un serveur distant connaissant son adresse IP voici comment je procède :


<br />
-(void)viewDidAppear:(BOOL)animated{<br />
  <br />
	[super  viewDidAppear:animated];<br />
	[self viewDidLoad];<br />
  <br />
	NSUserDefaults *defaultConf;<br />
	defaultConf=[NSUserDefaults standardUserDefaults];<br />
	NSString * broker =[defaultConf stringForKey:@&quot;broker&quot;];<br />
	<br />
	const char *brokerChar =[broker UTF8String];<br />
  <br />
	 char hostname[NI_MAXHOST] = {0};<br />
  <br />
	struct  hostent *hp;<br />
	long addr;<br />
	NSString *hostname1;<br />
  <br />
	addr = inet_addr(brokerChar);<br />
	if(hp = gethostbyaddr((char *) &amp;addr, sizeof(addr), AF_INET)){<br />
	  <br />
		//hostname1 = [[NSString alloc] initWithCString:hp-&gt;h_name encoding:NSUTF8StringEncoding];<br />
		//NSLog(@&quot;hostname: %@&quot;,hostname1);<br />
		printf(&quot;Hostanme:\t%s\n&quot;,hp-&gt;h_name);<br />
		printf(&quot;Aliases:\t&quot;);<br />
		while(hp-&gt;h_aliases[0])<br />
			printf(&quot;%s&quot;,*hp-&gt;h_aliases++);<br />
		printf(&quot;\n&quot;);<br />
		printf(&quot;Adresses:\t&quot;);<br />
		while (hp-&gt;h_addr_list[0])<br />
			printf(&quot;%s&quot;,inet_ntoa(*(struct in_addr *) * hp-&gt;h_addr_list++));<br />
		printf(&quot;\n&quot;);<br />
		exit(0);<br />
  <br />
	 }<br />
	fprintf(stderr, &quot;host %s not found\n&quot;,brokerChar);<br />
  //  exit(1);<br />
}<br />
  <br />
  <br />




mais je n'ai pas le resultat escompté dans la console j'ai "host 10.68.240.66 not found" je n'entre meme pas dans la condition et je ne comprends pas pourquoi???



Merci d'avance

Réponses

  • yoannyoann Membre
    Pour avoir le nom d'hôte d'un serveur distant via son IP, il faut que l'administrateur en charge des services DNS ait fait correctement son travail, chose de plus en plus rare.



    Le DNS permet d'associer une chaine de caractère à  une autre, soit un nom de domaine à  un autre nom de domaine, à  un IP, ou à  des choses plus complexes comme les entrées SRV.



    La convention pour résoudre les adresse IP en nom de domaine est d'inversé l'écriture d'un IP pour en faire une entrée in-addr.arpa. Par exemple, 192.168.42.10 deviendrait 10.42.168.192.in-addr.arpa.



    Si on a bien configurer ses serveurs DNS avec les zones de reverse on aura donc ceci :
    <br />
    % host 192.168.42.10<br />
    10.42.168.192.in-addr.arpa domain name pointer server.example.com.<br />
    




    Maintenant si on est sur une IP publique, c'est plus problématique, nombre de prestataires de services (FAI, hébergeur...) ne propose pas la possibilité de modifier le reverse DNS d'une zone.
  • PisixPisix Membre
    'yoann' a écrit:




    Maintenant si on est sur une IP publique, c'est plus problématique, nombre de prestataires de services (FAI, hébergeur...) ne propose pas la possibilité de modifier le reverse DNS d'une zone.


    Non on n'a pas affaire à  une adresse IP publique, nous somme dans un réseau local. Si le serveur à  une adresse 192.168.42.10 à  cette adresse correspond un nom de domaine locale T1052.T13.local c'est donc cette dernière que j'aimerai avoir.
    'yoann' a écrit:


    Pour avoir le nom d'hôte d'un serveur distant via son IP, il faut que l'administrateur en charge des services DNS ait fait correctement son travail, chose de plus en plus rare.


    Là  je ne le saurais pas si l'admin à  bien fait son boulot. Bon a supposer qu'il a bien fait son boulot qu'est ce qui cloche dans ma maniere d'essayer de recuperer le nom d'hote du serveur distant image/huh.gif' class='bbc_emoticon' alt='???' />



    Merci d'avance
  • yoannyoann Membre
    T1052.T13.local n'est pas un vrai nom de domaine, c'est un nom de recherche local pour Bonjour, ça ne passe pas les VLan. Regarde dans la doc de Bonjour.
  • PisixPisix Membre
    image/crybaby.gif' class='bbc_emoticon' alt=' :'( ' /> ouffff depuis hier je fouille la doc de Bonjour mais je ne trouve rien du tout.



    help me pleaseee
  • yoannyoann Membre
    Il faut que ta découverte d'adresse IP de serveur se fasse via Bonjour à  la base, que ton serveur s'annonce sur Bonjour et que tu le trouve via Bonjour.
  • PisixPisix Membre
    mars 2013 modifié #7
    'yoann' a écrit:


    Il faut que ta découverte d'adresse IP de serveur se fasse via Bonjour à  la base,


    Oui dans la doc de Bonjour j'ai vu cette notion de découverte de service et autre mais dans mon cas à  la base c'est l'utilisateur qui choisit le serveur d'application dans lequel il veut taper. Donc il y'a pas de découverte car l'adresse IP est connu au préalable. et c'est le nom en local de ce serveur que je veux récupérer avec le code que j'ai proposé à  l'ouverture du sujet "T1052.T13.local" avec T1052 etant le Nom de la machine et T13.local nom de domaine du LAN
  • yoannyoann Membre
    Comme je te disais, pour utiliser les noms bonjour tu es obliger d'avoir une découverte via bonjour et donc un serveur qui s'annonce sur Bonjour.



    Si tu veux passer par l'IP directement il faut configurer un serveur DNS.
  • PisixPisix Membre
    Je ne pourrais donc pas utilisé bonjour vu que je ne fais pas de decouverte via Bonjour.
    'yoann' a écrit:




    Si tu veux passer par l'IP directement il faut configurer un serveur DNS.


    Le serveur DNS est déjà  configuré
  • 'Pisix' a écrit:


    Le serveur DNS est déjà  configuré




    Alors quel est le problème ?
  • 'jpimbert' a écrit:


    Alors quel est le problème ?


    le probleme est que je n'arrive pas en Objective-C à  faire la résolution de l'adresse IP du serveur distant en son nom de machine local "T1052.T13.local".
  • PisixPisix Membre
    mars 2013 modifié #12
    Non attendez je crois m'être gourée en fait il y'a mm pas de serveur DNS, il y'a aucun serveur DNS configuré. j'ai un reseau local dont le nom de domaine est "T13.local" et ce domaine contient plusieurs serveur dont T1052

    Désole pour l'erreur
Connectez-vous ou Inscrivez-vous pour répondre.