从 DNS 服务器提取 MX 记录
我正在编写一个应用程序,要求我对 MX 记录进行 DNS 查找。 我不确定是否有人有从事此类工作的经验,但如果您有的话,我们将不胜感激。
编辑: 我想要的是一个可以发送电子邮件警报的应用程序。 问题是我需要让应用程序能够查找域的 MX 记录。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
最简单的方法是简单地使用常用的工具。
基本的“dig”命令将通过以下查询将记录返回给您:
如果您只想要包含 mx 记录的行...
dig 在大多数 linux / unix 机器上都可用。
如果你在 Windows 上,你可以使用 nslookup
然后解析这些常用工具的输出。
编辑:来自网络的套接字的简单 C 示例
既然您将“C”作为标签,我猜您正在寻找使用原始套接字进行 MX 查找的源代码。 我从 http://www.developerweb.net/forum/showthread.php 复制了此内容?t=3550。 这可能是您正在寻找的更多内容?
The simplest method is to simply use commonly available tools.
The basic "dig" command will return the records to you via this query:
If you want just the lines with the mx records...
dig is available on most linux / unix boxes.
If you're on windows you can use nslookup
Then just parse the output of these common tools.
EDIT: Simple C example of sockets from the web
Since you put "C" as a tag, I guess you're looking for source code to do MX lookups using raw sockets. I copied this from http://www.developerweb.net/forum/showthread.php?t=3550. It may be more what you're looking for?
我注意到你是为 Linux 编写的。 常规程序在类 Unix 系统上发送邮件的惯用方式是:
这两种方式都假定本地邮件程序已配置为将邮件传递到它必须去的地方; 在配置良好的 Linux 机器上,这是一个合理的假设。
如果这没有吸引力,第二好的方法是让您的程序接受要使用的本地邮件中继服务器的地址,然后仅在端口 25 上连接到该服务器。
换句话说,只要有可能,请使用现有的邮件中继来发送您的邮件。 这些邮件中继将拥有从您正在运行的网络中获取邮件所需的所有本地知识 - 仅查找 MX 并尝试直接发送到目的地并不总是有效。
如果您已阅读所有内容,但仍然想要查找 MX 记录,请尝试 adnslibrary,它负责处理 DNS 解析中涉及的所有繁琐的细节(相信我,它很繁琐,而且很容易出错!)。
I notice that you're writing for Linux. The idomatic way for a regular program to send mail on Unix-like systems is either:
Both ways presume that the local mailer is configured to pass mail on to where it has to go; on a well-configured Linux box this is a fair assumption.
If that doesn't appeal, the second-best way is for your program to accept the address of a local mail relay server to use, and just connect to that server on port 25.
In other words, wherever possible, use an existing mail relay to send your mail on. Those mail relays will have all the local knowledge that might be necessary to get mail out of the network that you're running on - just looking up the MX and trying to send directly to the destination is not always going to work.
If you've read all that and you still want to look up MX records, try the adns library, it takes care of all the tedious details involved in DNS resolution (and believe me, it is tedious, and easy to get wrong!).
在Linux上:
on linux:
[免责声明:我曾经是 SnertSoft 的产品的快乐 Beta 测试者,并且我仍在运行他们的几个产品]
实际上手动执行此操作有其陷阱,例如,当您必须处理截断的响应并需要从 UDP 切换时到 TCP。
SnertSoft 的
libsnert
(免费,需要点击许可证)已经有一个返回条目向量的 C 实现。 如果可能的话,尽量避免“not-invented-here”:)您确实必须重新实现 MTA 而不是使用某些现有的解决方案吗?
[Disclaimer: I used to be a happy beta tester of SnertSoft's stuff, and I'm still running several of their products]
Actually doing this by hand has its pitfalls, e.g. when you have to handle a truncated response and need to switch from UDP to TCP.
SnertSoft's
libsnert
(free, click-through-license required) already has a C implementation for this returning a vector of entries. Try to avoid "not-invented-here" if possible :)Do you indeed have to reimplement an MTA instead of using some existing solution?
查看 NLnet Labs 的 ldns。 该库处理低级数据包处理,并具有自己的内置解析器客户端。
该文档包括示例代码,它完全符合您的要求。
Take a look at ldns, from NLnet Labs. This library handles low level packet handling and has its own resolver client built-in.
The documentation includes example code that does exactly what you require.