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

Réseau C Discussion :

création client dns


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut création client dns
    bonjour, j'aimerais avoir quelques informations complémentaire sur les client dns, je recherche des exemple d'utilisation des différentes commandes avec telnet, car j'en ait pas trouver sur le net. j'aimerais savoir aussi comment faire pour ne pas utiliser gethostbyname pour faire une connexion en tcp pour un client dns , quel est l'alternative de gethostbyname?

    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Le protocole DNS est un protocole qui se base essentiellement sur UDP (port 53). La seule part du protocole qui se fait en TCP concerne la réplication/synchronisation des serveurs DNS entre eux, c'est le transfert de zone et cela ne te concerne pas dans le cas présent.

    Une requête DNS est envoyée en UDP à un serveur DNS et dans cette requête on retrouve le nom de la machine dont on cherche l'adresse IP.
    Le serveur DNS répond à cette requete (toujours en UDP) en donnant l'adresse IP trouvé ou alors un code d'erreur si le nom de machine n'existe pas.

    Telnet est un programme client qui fonctionne sur TCP uniquement. C'est donc pour cela que tu ne peut trouver de client DNS s'appuyant sur Telnet.

    nslookup ou dig par exemple sont des client DNS que l'on peut trouver sur toutes les distributions Linux.

    La fonction gethostbyname() est une fonction standard de l'API C. Cette fonction va tenter une résolution DNS en regardant d'abord dans le fichier /etc/hosts puis si la machine n'est pas trouvée, va envoyer une requete DNS au serveur DNS (en fait, c'est un tout petit peu plus compliqué que cela, mais cette explication est un bon début).

    Si maintenant, tu veux une alternative à gethostbyname() (je ne sais vraiment pas pourquoi, mais bon ...), tu peux créer tes propres requetes UDP DNS, les envoyer au serveur et traiter les réponse. C'est relativement simple mais cela demande de la rigueur dans l'implémentation et aussi la lecture de la RFC 1035 concernant le protocole DNS (il y a probablement d'autre RFC traitant du DNS mais c'est le point de départ).
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    La fonction gethostbyname() est une fonction standard de l'API C.
    C'est plutôt une fonction de l'API Berkley Sockets.
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    La fonction gethostbyname() est une fonction standard de l'API C.
    Citation Envoyé par ssmario2 Voir le message
    C'est plutôt une fonction de l'API Berkley Sockets.
    Tu as raison, ce que je voulais dire par là, c'est qu'on retrouvait cette fonctions (et ses cousines) sur beaucoup/toutes les machines.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    pouvez vous me proposer des idées d'implémentation pour créer des requêtes UDP DNS, les envoyer au serveur et traiter les réponse?

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Heu ...
    • Lire la RFC proposée plus haut.
    • Savoir créer créer et gérer des socket (donc connaitre l'API de gestion des sockets)
    • Ensuite, comme je l'ai dit, c'est simple mais il faut de la rigueur.

    Au fait quel intérêt de réinventer ce que fait très bien gethostbyname() ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    pouvez vous m'éclairer sur un point? lors des requêtes dns,pour le bloc de données a envoyer, est ce qu'il faut un bloc entier ou bien les découper et les envoyer un après l'autre?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    je voudrais savoir comment établir une connexion du client dns avec un serveur dns (la partie entre la création de le socket et la partie de de la fonction connect() ) du point de vu implémentation.

    Merci de votre compréhension.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Une requête DNS est envoyée en UDP à un serveur DNS et dans cette requête on retrouve le nom de la machine dont on cherche l'adresse IP.
    Le serveur DNS répond à cette requete (toujours en UDP) en donnant l'adresse IP trouvé ou alors un code d'erreur si le nom de machine n'existe pas.
    Citation Envoyé par l'unique Voir le message
    je voudrais savoir comment établir une connexion du client dns avec un serveur dns (la partie entre la création de le socket et la partie de de la fonction connect() ) du point de vu implémentation.
    Un connect(), c'est quand on fait une connexion TCP, une reqête DNS se fait en UDP.

    Ta séquence devrait être :
    1. socket()
    2. preparation de la requete
    3. sendto()
    4. analyse du code d'erreur eventuel
    5. recvfrom()
    6. analyse du code d'erreur eventuel
    7. analyse de la réponse
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    pouvez vous me donner un exemple d'une requête DNS, je sais ce qu'il faut mettre dedans mais je ne connait pas la forme que dois avoir cette requête.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    bonjour, je bloque sur un point, je voulais savoir si est ce qu'il faut envoyer l'entête et la question avec un sendto "globale" ou bien deux envoies, l'un correspondant à l'entête et l'autre à la question? sendto renvoie -1 pour signaler l'erreur.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    typedef struct 
    {
      unsigned short id;       // identification number
      unsigned char rd :1;     // recursion desired
      unsigned char tc :1;     // truncated message
      unsigned char aa :1;     // authoritive answer
      unsigned char opcode :4; // purpose of message
      unsigned char qr :1;     // query/response flag
      unsigned char rcode :4;  // response code
      unsigned char cd :1;     // checking disabled
      unsigned char ad :1;     // authenticated data
      unsigned char z :1;      // its z! reserved
      unsigned char ra :1;     // recursion available
      unsigned short q_count;  // number of question entries
      unsigned short ans_count; // number of answer entries
      unsigned short auth_count; // number of authority entries
      unsigned short add_count; // number of resource entries
    }DNS_HEADER;
     
     
    typedef struct
    {
      unsigned char* qname;
      unsigned short qtype;
      unsigned short qclass;
    }QUESTION;
     
     
            qinfo = (QUESTION*)&buf[sizeof(DNS_HEADER)];
     
    	qinfo->qname = (unsigned char*) "3www6google3com0";
    	qinfo->qtype = htons(1); //Our version is currently ipv4 address
    	qinfo->qclass = htons(1); // For internet protocol
     
    	printf("Sending packet..\n");
     
    	if((size = sendto(sock, (char*) buf, sizeof(DNS_HEADER)+ sizeof(QUESTION),0,
    			 (struct sockaddr*)&dest, sizeof(dest))) == -1)
    	{
    		printf("Error sending packet\n");
    	}
    	printf("size sendto: %d\n",size);
    Merci de votre compréhension.

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

Discussions similaires

  1. enregistrement client DNS via serveur DHCP
    Par deadcankill dans le forum Solaris
    Réponses: 1
    Dernier message: 06/07/2009, 22h02
  2. [WSDL2JAVA]websphere V5.1 création client
    Par noOneIsInnocent dans le forum Websphere
    Réponses: 6
    Dernier message: 25/06/2009, 10h01
  3. création de DNS et connexion oracle en VBA EXCEL
    Par sami117 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/12/2008, 14h05
  4. Client DNS TCP
    Par barths dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 15/10/2008, 09h54
  5. Création client particulier ou entreprise
    Par goutbouyo dans le forum Access
    Réponses: 5
    Dernier message: 15/03/2007, 14h13

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