RFC pour client DNS

Un espace dédié aux utilisateurs enregistrés, pour parler de tout et de rien, mieux se connaître...

Modérateur : Modérateurs

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » sam. 30 oct. 2004, 23:57

Bonsoir, les gens ...

J'ai la flemme de chercher là ...

Quelqu'un saurait dans quelle RFC est défini le protocole d'interrogation d'un serveur DNS ?

Parce que, la liste des RFC liées au DNS est impressionante ... (http://www.dns.net/dnsrd/rfc/)

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb
Image
http://www.zmws.com/

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » dim. 31 oct. 2004, 21:19

cette URL a l'air intéressante ma foi :

<a href='http://www.freesoft.org/CIE/RFC/1035/39.htm' target='_blank'>http://www.freesoft.org/CIE/RFC/1035/39.htm</a>
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » dim. 31 oct. 2004, 23:27

1034 et 1035 donc !

Merci !

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb

Image

http://www.zmws.com/

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » mar. 02 nov. 2004, 11:56

par curiosité, c'est pour quoi faire ? :rolleyes:
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » mar. 02 nov. 2004, 12:05

Récupérer le MX d'un domaine ?

Pour abuser, comment récupérer le serveur DNS utilisé par défaut sur un PC sous Windows (pour linux, c'est bon, on n'a même pas besoin de connaître la rfc :))

Sous windows, il semblerait que les fonctions utiles à l'interrogation des dns ait été "oubliée" dans certaines versions ...
Platform SDK: Domain Name System (DNS)
DnsQuery
[...]
Requirements:
Client: Requires Windows XP or Windows 2000 Professional.
Server: Requires Windows Server 2003 or Windows 2000 Server.
Header: Declared in Windns.h.
Library: Use Dnsapi.lib.


Je vais me le faire en php, ça ira plus vite ...

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb

Image

http://www.zmws.com/

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » mar. 02 nov. 2004, 13:09

toi, tu essaies de programmer un serveur SMTP ;)

apparement, cette api windns est toute récente...

sinon, pour recuperer le serveur dns de la connection active, tu peux toujours essayer de passer par ipconfig... qui fait appel à dnsapi (je suis sous 2000)
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » mar. 02 nov. 2004, 14:03

toi, tu essaies de programmer un serveur SMTP ;)


Non, msieu', je l'jure, c'est pas moi :unsure:

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb

Image

http://www.zmws.com/

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » mar. 02 nov. 2004, 14:35

Pour abuser, comment récupérer le serveur DNS utilisé par défaut sur un PC sous Windows


Après recherche, il semblerait qu'on le trouve là:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

Ensuite, il y a deux valeurs, selon qu'on est configurés par dhcp ou manuellement
DhcpNameServer ou NameServer

Une de ces valeurs contient l'IP du serveur DNS à interroger ...

Test fait sous 2000, si d'autres pouvaient confirmer ...

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb

Image

http://www.zmws.com/

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » mar. 02 nov. 2004, 16:12

Ceci n'est valable que pour une seule interface réseau activée ...

Avec plusieurs, il faut aller chercher dans
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

Trouver la bonne interface en fonction des valeurs IpAddress ou DhcpIpAddress puis, une fois trouvée, consulter NameServer ou DhcpNameServer.

En on y trouve une liste des serveurs DNS, séparés par des virgules ...

Et là, je me dis:

C'est tellement beau un fichier /etc/resolv.conf ...

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb

Image

http://www.zmws.com/

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » mar. 02 nov. 2004, 16:34

ouais, mais c'est trop simple, lol !!
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » mar. 02 nov. 2004, 17:06

Je posterai le code pour récupérer les serveurs dns, si je me fais pas virer pour flood :lol:

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb

Image

http://www.zmws.com/

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » mar. 02 nov. 2004, 20:06

Bon, ça y est j'ai fait le premier jet (maintenant, je vais manger ...)

Voilà le code principal, je suis ouvert aux suggestions et remarques:

Code : Tout sélectionner

#include "zms_dns.h"

std::string ZMS_DNS::getNameServers() {
    std::string ns_IPs = getInterfacesNameServers();
    if (ns_IPs.length()) return ns_IPs;
        
    DWORD index = 0;
    HKEY MainKey;
    if ( RegOpenKeyEx(   
            HKEY_LOCAL_MACHINE,
            "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces",
            0,
            KEY_ENUMERATE_SUB_KEYS,
            &MainKey
            ) == ERROR_SUCCESS) {
        do {
            DWORD DataSize = 260;
            char interf[DataSize];
            FILETIME lastWriteTime;
          
            LONG retcode = RegEnumKeyEx(MainKey,
                                        index++,
                                        (char*)&interf,
                                        &DataSize,
                                        NULL,
                                        NULL,
                                        NULL,
                                        &lastWriteTime);
            if (retcode != ERROR_SUCCESS) break;
            std::string tmpS = getInterfacesNameServers(interf);
            if (tmpS.length())
                ns_IPs += tmpS + ",";
        } while (1);
  RegCloseKey(MainKey);
    }
    return ns_IPs;                    
}

std::string ZMS_DNS::getRegValue(const HKEY& key, const std::string& value) {
    DWORD Type;
    DWORD DataSize = 1024;
    char Data[DataSize];
    std::string retval;
    
    LONG retcode = RegQueryValueEx(
     key,
     value.c_str(),
     NULL,
     &Type,
     (BYTE*)&Data,
     &DataSize
     );
    if ( (retcode == ERROR_SUCCESS) && (DataSize>1) ) { // 1 pour le 0 terminal
        retval = Data;
    }    
    return retval;
}
    
std::string ZMS_DNS::getInterfacesNameServers(const std::string interf) {
    HKEY hkResult;
    std::string interf_ns_IPs;
    std::string key_name = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters";
    if (interf.length()) key_name += "\\Interfaces\\"+interf;

   if ( RegOpenKeyEx(   
            HKEY_LOCAL_MACHINE,
            key_name.c_str(),
            0,
            KEY_QUERY_VALUE,
            &hkResult
            ) == ERROR_SUCCESS) {
        DWORD DataSize = 1024;
        char Data[DataSize];
        if (!interf.length()) {
            interf_ns_IPs = getRegValue(hkResult, "NameServer");
            if (!interf_ns_IPs.length()) interf_ns_IPs = getRegValue(hkResult, "DhcpNameServer");
        } else {
            if (getRegValue(hkResult, "NTEContextList").length()) {
                std::string iptest;
                iptest = getRegValue(hkResult, "IpAdress");
                if (iptest=="0.0.0.0") iptest = getRegValue(hkResult, "DhcpIpAdress");
                if (iptest!="0.0.0.0") {
                    interf_ns_IPs = getRegValue(hkResult, "NameServer");
                    if (!interf_ns_IPs.length()) interf_ns_IPs = getRegValue(hkResult, "DhcpNameServer");
                }    
            }    
        }    
     RegCloseKey(hkResult);
    }
    
    return interf_ns_IPs;  
}    


Le reste du code, le projet au format Dev-C++ et un exe affichant votre/vos NS sont ici (plus il y aura de tests, mieux on pourra vérifier): <a href='http://fichiers.xgarreau.org/ZazouMailServer/' target='_blank'>http://fichiers.xgarreau.org/ZazouMailServer/</a>

Pour la petite histoire, je ne vais pas faire un serveur SMTP mais essayer de m'orienter plutôt vers un "proxy" SMTP. Je vais le faire répondre comme un serveur SMTP mais renvoyer dès que possible le flux vers le bon MX ...

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb

Image

http://www.zmws.com/

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » mer. 03 nov. 2004, 11:16

n'est-ce pas ce que fait un bon serveur SMTP qui se respecte ?
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » mer. 03 nov. 2004, 11:34

Je pense qu'un bon SMTP qui se respecte traite le mail envoyé par un client puis se connecte à un serveur, devenant client à son tour ...

C'est plus compliqué. J'aimerais rester simple mais plus j'y réfléchis moins ça en prend le chemin ;)

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb

Image

http://www.zmws.com/


Revenir vers « Communauté »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités