¿Hay alguna función en C en Linux por la cual podamos consultar un registro MX (como gethostbyname).?Consultar el registro MX en C linux
Respuesta
Enlace con -lresolv
(BIND's 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;
}
¿Necesitamos alguna biblioteca externa para ejecutar este programa? – avd
Como ya mencioné: esto necesita 'libresolv', que originalmente viene del proyecto BIND (pero glibc tiene una copia). – ephemient
¿Cómo instalar esta biblioteca? ¿No podemos hacer consultas MX sin ninguna biblioteca externa? – avd
Solo quiero añadir a la respuesta anterior. Estaba obteniendo errores de compilación. Después de buscar, llegué a un foro sobre cómo compilar. Primer uso principal función como (por ejemplo gmail.com)
main(){
char *mxs[10];
int a;
printf("%d\n",a=resolvmx("gmail.com",mxs,10));
printf("%s\n",mxs[a-1]);
}
y luego compilarlo como
gcc <pname.c> /usr/lib/libresolv.a (instead of gcc pname.c -lresolv)
Si falta '/ usr/lib/libresolv.so', aún debería usar' -Wl, -Bstatic -lresolv' en lugar de apuntar directamente a 'libresolv.a'. – ephemient
pero las opciones anteriores no funcionan – avd
No tiene que especificar la ruta a la biblioteca. El problema que probablemente vea es que hay bibliotecas vinculadas después de '-lresolv' para las cuales no hay versiones estáticas disponibles. Así que puedes hacer esto en su lugar: '-Wl, -Bstatic -lresolv -Wl, -Bdinámica', o más sucintamente:' -static -lresolv -dynamic'. – jxh
- 1. Encontrar el registro MX usando C#?
- 2. ¿Cómo valido el registro MX de un dominio en python?
- 3. Cómo consultar el registro de MMS en Android
- 4. ¿Desea actualizar un registro sin consultar primero?
- 5. Registro de daemon en Linux
- 6. Funciona la función PHP mail() si no poseo el registro MX
- 7. ¿Cómo consultar las máscaras de subred usando Mono en Linux?
- 8. C#: ¿Cómo consultar los detalles de un registro de eventos con una identificación de evento determinada?
- 9. leer un valor en el registro C++
- 10. El registro de Python es extremadamente lento en el servidor Linux ... pero rápido en el desarrollo de Linux VM?
- 11. C# en entorno linux
- 12. C en Linux Terminal
- 13. C threading en linux?
- 14. Cómo ejecutar el proyecto C# en Linux
- 15. Validación de correo electrónico MX Lookup
- 16. Búsqueda y verificación de registros MX
- 17. marcos de registro para Linux integrado?
- 18. Uso de registros MX para validar direcciones de correo electrónico
- 19. registro de errores en la velocidad en los sistemas Linux
- 20. Pitido en Linux en C
- 21. Uptime en Linux en C
- 22. Desactivar el registro en PDFBox
- 23. Múltiples consumidores y consultar un C# BlockingCollection
- 24. Detectar Windows o Linux en C, C++
- 25. Registro de error del comando make en Linux
- 26. Bloquear archivos en Linux con c/C++
- 27. Ver un archivo de registro en Linux dinámicamente
- 28. de Objective-C en Linux
- 29. Registro palabra clave en C++
- 30. Desarrollo de C# en Linux
Este es un duplicado de un duplicado. –
Por favor, no elimine esto. Otra publicación no tiene respuestas completas. Este rectifica por completo el problema. – avd