Existe-t-il une fonction dans C sous Linux permettant d'interroger l'enregistrement MX (comme gethostbyname)?Interrogation de l'enregistrement MX dans C linux
Répondre
Lien avec -lresolv
(BIND libresolv
).
#include <arpa/inet.h>
#include <resolv.h>
#include <string.h>
int resolvmx(const char *name, char **mxs, int limit) {
unsigned char response[NS_PACKETSZ]; /* big enough, right? */
ns_msg handle;
ns_rr rr;
int mx_index, ns_index, len;
char dispbuf[4096];
if ((len = res_search(name, C_IN, T_MX, response, sizeof(response))) < 0) {
/* WARN: res_search failed */
return -1;
}
if (ns_initparse(response, len, &handle) < 0) {
/* WARN: ns_initparse failed */
return 0;
}
len = ns_msg_count(handle, ns_s_an);
if (len < 0)
return 0;
for (mx_index = 0, ns_index = 0;
mx_index < limit && ns_index < len;
ns_index++) {
if (ns_parserr(&handle, ns_s_an, ns_index, &rr)) {
/* WARN: ns_parserr failed */
continue;
}
ns_sprintrr (&handle, &rr, NULL, NULL, dispbuf, sizeof (dispbuf));
if (ns_rr_class(rr) == ns_c_in && ns_rr_type(rr) == ns_t_mx) {
char mxname[MAXDNAME];
dn_expand(ns_msg_base(handle), ns_msg_base(handle) + ns_msg_size(handle), ns_rr_rdata(rr) + NS_INT16SZ, mxname, sizeof(mxname));
mxs[mx_index++] = strdup(mxname);
}
}
return mx_index;
}
Avons-nous besoin d'une bibliothèque externe pour exécuter ce programme? – avd
Comme je l'ai déjà mentionné: cela nécessite 'libresolv', qui provient à l'origine du projet BIND (mais glibc en a une copie). – ephemient
Comment installer cette bibliothèque? Ne pouvons-nous faire une requête MX sans bibliothèque externe? – avd
Je veux juste ajouter à la réponse ci-dessus. Je recevais des erreurs de compilation. Après avoir cherché, j'ai eu un forum sur la façon de compiler. Première utilisation principale fonction que (pour dire gmail.com)
main(){
char *mxs[10];
int a;
printf("%d\n",a=resolvmx("gmail.com",mxs,10));
printf("%s\n",mxs[a-1]);
}
puis Compile comme
gcc <pname.c> /usr/lib/libresolv.a (instead of gcc pname.c -lresolv)
S'il vous manque '/ usr/lib/libresolv.so', vous devriez toujours utiliser' -Wl, -Bstatic -lresolv' au lieu de pointer directement vers 'libresolv.a'. – ephemient
mais les options ci-dessus ne fonctionnent pas – avd
Il n'est pas nécessaire de spécifier le chemin d'accès à la bibliothèque. Le problème que vous voyez probablement est qu'il existe des bibliothèques qui sont liées après '-lresolv' pour lesquelles aucune version statique n'est disponible. Donc, vous pouvez le faire à la place: '-Wl, -Bstatic -lresolv -Wl, -Bdynamic', ou plus succinctement:' -static -lresolv -dynamic'. – jxh
- 1. interrogation éléments de tableau imbriqués dans C#
- 2. Trouver l'enregistrement MX en utilisant C#?
- 3. Linux/Python: Surveille les fichiers/proc/acpi sans interrogation?
- 4. mx: Retour à la ligne de mx: Liste
- 5. mx: MediaPlayback Flex tag
- 6. Interrogation de plusieurs fichiers XML avec LINQ dans C# Statements
- 7. Impossible d'importer des packages mx
- 8. Flex: MX + Sparks contre les composants MX uniquement
- 9. Copier bitmapData De mx: Image
- 10. Programmation avec C/C++ dans Ubuntu linux
- 11. Erreur avec mx: Remoteobject
- 12. Interrogation d'un serveur DHCP en C#
- 13. Dynamic MX Records
- 14. MouseEvent.MOUSE_DOWN sur mx: TextInput
- 15. Capture d'événements clés dans un mx: Image
- 16. Telnet contre Aastra Mx-One
- 17. Que fait mx: target dans Flex 3?
- 18. Interrogation de positions de tableau dans MongoDB?
- 19. Flex: Fait * n'importe quoi * avec le texte sélectionné dans un mx: Label ou mx: Text?
- 20. Interrogation d'une fonction dans functions.php?
- 21. Interrogation années usertype dans NHibernate
- 22. Interrogation deux tables ... dans MySQL
- 23. Interrogation d'une vue dans SQLAlchemy
- 24. Interrogation de l'API Webservice
- 25. Sphinx en C++ (Linux)
- 26. EntitySet Interrogation
- 27. Interrogation Memcached
- 28. Interrogation de colonnes XML dans SQLServer 2005
- 29. Interrogation de tables répertoriées dans DBA_Tables
- 30. Interrogation de colonnes non mappées dans NHibernate
Ceci est un double d'un double. –
Veuillez ne pas enlever ceci. D'autres postes n'ont pas de réponses complètes. Celui-ci rectifie complètement le problème. – avd