IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Changer le DNS Provider utilisé par java.net.InetAddress


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut Changer le DNS Provider utilisé par java.net.InetAddress
    Bonsoir à tous,

    Je rencontre un problème avec la résolution DNS effectuée par la méthode getByName() de la classe java.net.InetAddress.

    En effet, je suis amené a faire un grand nombre de requêtes de résolution (et très très vite) vers des serveurs DNS spéciaux qui font autorité sur un domaine précis.
    Actuellement, j'utilise ceux qui sont paramétrés sur la machine que j'utilise pour test et les résultats ne sont pas satisfaisant (comme me le précise la documentation de InetAddess).
    J'aimerais pouvoir préciser mes propres serveurs DNS dans la configuration de mon application pour forcer InetAddress à se référer à ce serveur plutôt qu'à ceux fixés sur la machine (l'application tournera sur des machines dont on ne peut peut-être pas changer la configuration) pour éviter toute la phase récursive de recherche du serveur autorité.
    Au bout d'un certain temps les paquets "server failure" sont légion si je n'utilise pas le serveur DNS autorité.

    J'ai trouvé la page Network Properties mais je ne suis pas sur qu'elle soit maintenues dans les prochaines versions de Java.
    Existe-t-il une solution alternative, du style de passer l'adresse du serveur à contacter par un paramètre dissimulé dans la documentation?

    Merci par avance pour vos réponse, bon week end.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Une alternative: dialoguer vous même avec le serveur DNS. Le protocole DNS se fait sur UDP il suffit d'une socket UDP sur ledit serveur pour faire vos propres résolution. Maintenant le beaucoup de requêtes très très vite, pourriez vous préciser? Quel est le but recherché? Parce qu'il existe certaines spécificité du serveur DNS pour certaines applications précises afin, justement, d'éviter de flooder le serveur DNS.

    Sinon, pour les properties, voilà celles qui seront supportées en java 7 à l'heure actuelle, si ça peut aider.
    http://download.oracle.com/javase/7/...roperties.html

    Tout ce qui ne commence pas par sun est supposé marcher sur toutes les implémentations

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut
    Bonjour tchize, merci pour votre réponse,

    Pour le "très vite", c'est beaucoup de requêtes, je ne saurais dire, environ une dizaine à la seconde.
    Je cherche à connaitre des IP de machines alors que je connais la règle qui conduit à établir leur nom.

    Au niveau du dialogue, je suis moyennement intéressé.
    J'ai trouvé la librairie DNSjava qui est relativement compliquée à manier. Mais j'ai réussi à effectuer une résolution de nom avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    boolean result = false; // Dit si la recherche a rencontré un probleme
    booealn trouve = false; // Dit si la recherche a retourné un résultat.
    String ip_chaine = null; // IP retournée
    String nom_equip = "nom_a_resoudre";
     
    try {
    	ExtendedResolver res = new ExtendedResolver (new String[]{"serv_1", "serv_2"});
    	Lookup lkp = new Lookup(nom_host); // Construction d'un objet de recherche au niveau du DNS
    	lkp.setResolver(res); // On défini les serveurs DNS du parc comme source de résolution
    	Record[] answers = lkp.run(); // On fait la requête
     
    	if (answers != null){
    		ip_chaine = answers[0].rdataToString(); // On assigne l'IP trouvée
     
    		result=true; // Recherche OK
    		trouve=true; // Trouvée
    	}
    } catch (Exception e) {
    	e.printStackTrace();
    }
    Le résultat est relativement lent, plus lent que si j'utilise le DNS paramétré sur ma machine puisque ce dernier est sur mon réseau et que j'utilise dans ce cas l'implémentation Java native alors que dans le cas ou j'utilise le DNS modifié, il est loin à travers Internet.
    Enfin, cela dépends plus de la configuration du réseau que de Java. Mon problème est donc résolu.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    une dizaine à la seconde, c'est pas ce que j'appelerais beaucoup. Pour info, un serveur mail qui fait du reverse dns, c'est dans ces eaux là, et en général ca se contente de l'implémentation standard du système hote (tout comme java)

    Quand j'ouvre mon firefox avec une 20 aines d'onglet ouvert, il fait 20 résolutions dns d'une coup, j'imaginais bien pire à votre description

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut
    Oui, en effet je ne le voyais pas comme ça

    Par contre on peut imaginer qu'il existe des limites anti-flood sur ce genre de serveur. Ce qui pourrait expliquer les "server failure" qui apparaissent au bout de quelques minutes de mon traitement

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Non, c'est surtout que c'est de l'udp, si tu charge trop ton réseau, t'aura une perte de paquet. Un serveur dns, ca dois gérer, en général, des milliers de machines qui font des demandes, c'est calibré pour tenir le coup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ASE15] select java.net.InetAddress.getLocalHost() --> NoClassDefFoundError
    Par blured dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 06/04/2011, 08h45
  2. version de java utilisé par websphere
    Par javaweb44 dans le forum Websphere
    Réponses: 8
    Dernier message: 09/09/2009, 15h22
  3. Changer le dossier courant utilisé par le shell sous linux
    Par CyberSlan dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/08/2008, 11h53
  4. Debug d'une DLL utilisé par un site ASP.Net
    Par vince_lille dans le forum ASP.NET
    Réponses: 8
    Dernier message: 06/03/2008, 14h38
  5. [Developpement : Java > .Net] Par où commencer ?
    Par nikalkal dans le forum Framework .NET
    Réponses: 12
    Dernier message: 30/08/2006, 01h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo