web-dev-qa-db-fra.com

Résoudre le nom d'hôte en une adresse IP

J'ai développé une application de simulation client/serveur. J'ai déployé le client et le serveur sur deux machines Windows différentes XP. D'une manière ou d'une autre, le client n'est pas en mesure d'envoyer des demandes au serveur.

J'ai essayé les options ci-dessous:

  1. Machine serveur ping envoyée avec succès à partir du client à l'aide de l'adresse IP.

  2. Machine client ping envoyée avec succès à partir du serveur à l'aide de l'adresse IP.

  3. Outil de ligne de commande netstat vérifié sur les deux machines. Le serveur est en mode LISTENING et le client est en SYS_SENT mode. Mais l'adresse étrangère qu'il utilise pour envoyer est le nom d'hôte et non l'adresse IP.

  4. La machine du serveur ping a échoué en utilisant le nom d'hôte du client.

  5. La machine cliente ping a réussi à utiliser le nom d'hôte du serveur.

Je pense que le problème vient du fait que le client essaie de se connecter au serveur en utilisant le nom d'hôte.

Pourriez-vous s'il vous plaît laissez-moi savoir comment forcer une application à utiliser une adresse IP au lieu d'un nom d'hôte? Existe-t-il un autre moyen de mapper le nom d'hôte à une adresse IP?

36
Mahesh

Accédez à votre ordinateur client et saisissez:

nslookup server.company.com

en remplaçant le vrai nom d'hôte de votre serveur par server.company.com, bien sûr.

Cela devrait vous dire quel serveur DNS votre client utilise (le cas échéant) et ce qu'il pense que le problème est avec le nom.

Pour forcer une application à utiliser une adresse IP, il suffit généralement de la configurer pour utiliser l'adresse IP au lieu d'un nom d'hôte. Si le nom d'hôte est codé en dur, ou si l'application insiste pour utiliser un nom d'hôte de préférence à une adresse IP (comme l'un de vos autres commentaires semble l'indiquer), alors vous n'avez probablement pas de chance.

Cependant, vous pouvez modifier la façon dont la plupart des ordinateurs résolvent les noms d'hôte, comme avec /etc/resolv.conf et /etc/hosts sur les systèmes UNIXy et n fichier d'hôtes local sur les systèmes Windows-y.

53
paxdiablo

Essayez tracert pour résoudre le nom d'hôte. IE vous avez l'adresse IP 8.8.8.8 donc vous utiliseriez; tracert 8.8.8.8

4
IT wannabe

Il est difficile de répondre sans plus de détails sur l'architecture du réseau. Certaines choses à étudier sont:

  • Est-il possible que le client et/ou le serveur se trouve derrière un appareil NAT, un pare-feu ou similaire?
  • L'une des adresses IP impliquées est-elle une adresse "locale", comme 192.168.x.y ou 10.x.y.z?
  • Quels sont les noms d'hôte, sont-ils de "vrais" DNS: des noms capables ou quelque chose de plus local et/ou spécifique à Windows?
  • Comment le client recherche-t-il le serveur? Il doit y avoir une place dans le code ou les données de configuration qui contient le nom d'hôte, essayez simplement d'utiliser l'IP à la place si vous voulez éviter la recherche.
0
unwind

Windows XP possède le pare-feu Windows qui peut interférer avec le trafic réseau s'il n'est pas configuré correctement. Vous pouvez désactiver le pare-feu Windows, si vous avez des privilèges d'administrateur, en accédant à l'applet Pare-feu Windows via le panneau de configuration. Si votre application fonctionne avec le pare-feu Windows désactivé, le problème est probablement dû aux paramètres du pare-feu.

Nous avons une application qui s'exécute sur plusieurs PC communiquant en utilisant UDP/IP et nous avons fait des expériences pour que l'application puisse s'exécuter sur un PC avec un utilisateur qui ne dispose pas de privilèges d'administrateur. Pour que notre application puisse communiquer entre plusieurs PC, nous avons dû utiliser un compte administrateur pour modifier les paramètres du pare-feu Windows.

Dans notre application, un PC est désigné comme serveur et les autres sont clients dans un groupe serveur/client et il peut y avoir plusieurs groupes sur le même sous-réseau.

La première modification a consisté à utiliser la fonctionnalité de l'onglet Exceptions de l'applet Pare-feu Windows pour créer une exception pour le port que nous utilisons pour la communication.

Nous utilisons la recherche de nom d'hôte afin que les clients puissent localiser leur serveur attribué en utilisant le nom de l'ordinateur qui est composé d'un préfixe mnémonique avec un tiret suivi d'un numéro de terminal attribué (par exemple SERVER100-1). Cela permet à plusieurs serveurs avec leurs clients assignés de coexister sur le même sous-réseau. Le client utilise son préfixe pour générer le nom d'ordinateur du serveur affecté, puis utiliser la recherche de nom d'hôte pour découvrir l'adresse IP du serveur affecté.

Nous avons constaté que la recherche de nom d'hôte utilisant le nom de l'ordinateur (attribué via l'onglet Nom de l'ordinateur de la boîte de dialogue Propriétés système) ne fonctionnerait que si le pare-feu Windows du PC serveur avait le port Service de partage de fichiers et d'imprimantes activé.

Nous avons donc dû apporter deux modifications: (1) configurer une exception pour le port que nous avons utilisé pour la communication et (2) activer le service de fichiers et d'imprimantes dans l'onglet Exceptions pour permettre la recherche de nom d'hôte.

** MODIFIER **

Vous pouvez également trouver ceci Article de la Base de connaissances Microsoft sur utile sur Windows XP networking .

Et voyez ceci article sur la résolution de noms NETBIOS sous Windows .

0
Richard Chambers

Vous pouvez utiliser une fonction C getaddrinfo () pour obtenir l'adresse numérique - ipv4 et ipv6. Voir l'exemple de code ici

0
Sathya