从DNS服务器拉MXlogging

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

编辑:我要去的东西是将发送电子邮件警报的应用程序。 问题是我需要让应用程序能够查找一个域的MXlogging。

Solutions Collecting From Web of "从DNS服务器拉MXlogging"

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

基本的“dig”命令将通过这个查询返回记录给你:

dig mx example.com 

如果你只想要mx记录的行…

 dig mx example.com | grep -v '^;' | grep example.com 

dig在大多数linux / unix盒子上都可用。

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

 nslookup -type=mx example.com 

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

编辑:简单的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); } 

我注意到你正在写Linux。 Unix类系统上定期发送邮件的方式是:

  • 在子进程中运行/ usr / bin / mail,并在其标准输入上发送邮件消息(请参阅邮件手册页); 要么
  • 连接到127.0.0.1:25,并给本地邮件守护进程传递消息。

两种方式都假定本地邮件程序被配置为将邮件传递到它必须去的地方; 在一个配置良好的Linux机器上,这是一个公平的假设。

如果不具有吸引力,第二好的方法是让程序接受使用的本地邮件中继服务器的地址,然后在端口25上连接到该服务器。

换句话说,只要有可能,就使用现有的邮件中继来发送邮件。 这些邮件中继将具有将邮件从您正在运行的网络中取出的所有必要的本地知识 – 只需查找MX并尝试直接发送到目的地并不总是可行。

如果您已经阅读了所有这些内容,并且仍然希望查找MX记录,请尝试使用adns库 ,它将处理DNS解析中涉及的所有繁琐细节(并相信我,这繁琐,容易出错! 。

在linux上:

 host -t mx google.com 

[免责声明:我曾经是一个SnertSoft的东西快乐的测试版,我仍然在运行他们的几个产品]

实际上这样做是有其缺陷的,例如,当你必须处理一个截断的响应,并且需要从UDP切换到TCP。

SnertSoft的libsnert (需要免费的点击通过许可证)已经有一个C实现,用于返回一个条目向量。 尽量避免“不要发明在这里”,如果可能的话:)

你真的不得不重新实现一个MTA而不是使用一些现有的解决方案吗?

看看NLnet Labs的ldns 。 该库处理低级别的数据包处理,并具有内置的自己的解析器客户端。

该文档包含示例代码 ,完全符合您的要求。