2010-02-23 4 views
1

Je veux écrire un code C portable (si possible) pour rechercher des enregistrements DNS TXT. Je préférerais également ne pas avoir de dépendances sur les bibliothèques qui ne sont pas livrées avec la machine. Quelle est la meilleure façon de faire cela sur des machines de type Unix utilisant des librairies standards?Meilleure façon de résoudre un enregistrement DNS TXT sur des systèmes de type Linux/Unix/Posix/BSD?

J'ai trouvé un exemple de code qui fonctionne en utilisant libresolv, mais il n'est pas réentrant (pas thread-safe) et est très moche. Y a-t-il un meilleur moyen?

En outre, qu'en est-Windows? S'il y avait un moyen qui fonctionnait là aussi, ce serait parfait.

Répondre

4

vous pouvez utiliser res_query qui utilise la norme libreolv.

Il y a un example here de ClamAV:

if((len = res_query(domain, C_IN, T_TXT, answer, PACKETSZ)) < 0) { 
    mprintf("@Can't query %s\n", domain); 
    return NULL; 
} 
+1

Oui, c'est le genre de code que j'ai trouvé. Vous devez ensuite analyser la réponse un peu. Mais ce n'est pas réentrant. Si vous l'utilisiez à partir de plusieurs threads, vous devrez l'entourer d'un mutex statique. Il y a des appels réentrants pour obtenir des adresses A, AAAA et CNAME via getaddrinfo() et pals. J'étais curieux de savoir s'il y a quelque chose que je ne sais pas qui fait quelque chose de similaire pour les enregistrements TXT. – AdamIerymenko

Questions connexes