从DNS服务器中提取MX记录

Sur*_*oot 9 c linux dns mx-record

我正在编写一个应用程序,要求我对MX记录进行DNS查找.我不确定是否有人有这种工作的经验,但如果你这样做,任何帮助将不胜感激.

编辑:我想要的是一个将发送电子邮件警报的应用程序.问题是我需要让应用程序能够查找域的MX记录.

Gre*_*tle 19

最简单的方法是简单地使用常用工具.

基本的"dig"命令将通过此查询将记录返回给您:

dig mx example.com
Run Code Online (Sandbox Code Playgroud)

如果你只想要带有mx记录的行......

dig mx example.com | grep -v '^;' | grep example.com
Run Code Online (Sandbox Code Playgroud)

dig可以在大多数linux/unix盒子上找到.

如果你在Windows上,你可以使用nslookup

nslookup -type=mx example.com
Run Code Online (Sandbox Code Playgroud)

然后只解析这些常用工具的输出.

编辑:来自网络的套接字的简单C示例

由于您将"C"作为标记,我猜您正在寻找使用原始套接字进行MX查找的源代码.我从http://www.developerweb.net/forum/showthread.php?t=3550复制了这个.它可能更符合您的需求?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <resolv.h>

int main (int argc, char *argv[])
{
    u_char nsbuf[4096];
    char dispbuf[4096];
    ns_msg msg;
    ns_rr rr;
    int i, j, l;

    if (argc < 2) {
        printf ("Usage: %s <domain>[...]\n", argv[0]);
        exit (1);
    }

    for (i = 1; i < argc; i++) {
        l = res_query (argv[i], ns_c_any, ns_t_mx, nsbuf, sizeof (nsbuf));
        if (l < 0) {
            perror (argv[i]);
        } else {
#ifdef USE_PQUERY
/* this will give lots of detailed info on the request and reply */
            res_pquery (&_res, nsbuf, l, stdout);
#else
/* just grab the MX answer info */
            ns_initparse (nsbuf, l, &msg);
            printf ("%s :\n", argv[i]);
            l = ns_msg_count (msg, ns_s_an);
            for (j = 0; j < l; j++) {
                ns_parserr (&msg, ns_s_an, j, &rr);
                ns_sprintrr (&msg, &rr, NULL, NULL, dispbuf, sizeof (dispbuf));
                printf ("%s\n", dispbuf);
            }
#endif
        }
    }

    exit (0);
}
Run Code Online (Sandbox Code Playgroud)