gpt4 book ai didi

bash - 如何从 Bash 中的域获取主 MX IP

转载 作者:行者123 更新时间:2023-12-05 08:59:18 25 4
gpt4 key购买 nike

我正在尝试编写一个 bash 脚本,它将从域名中找到它的 MX 记录,从中找出哪个是主要的(它们并不总是按顺序排列),然后找到它的 IP。(当有多个主 MX 时,第一个找到的就可以了)

例如:

./findmxip.sh gmail.com

会给我 173.194.71.26。为此,我需要托管 gmail.com然后在结果中找到主 MX 并托管它,获取其 IP。

最佳答案

要准确获得 0 或 1 个答案:

dig +short gmail.com mx | sort -n | nawk '{print $2; exit}' | dig +short -f -

您需要一个支持+short 的非古代dig

如前所述,“主要”MX 可能不止一个,因为首选项不必是唯一的。如果您想要所有最低偏好记录的所有 IP 地址,则:

dig +short oracle.com mx | sort -n | 
nawk -v pref=65536 '($1<=pref) {pref=$1; print $2}' |
dig +short -f - | uniq

这不处理没有 MX 记录且 A 记录接受电子邮件的情况,这是一种不常见但完全有效的配置。

遗憾的是,无论域是否存在 (NXDOMAIN),以及是否存在任何 MX 记录,我测试过的所有 dig 版本都返回 0。不过,您可以捕获 DNS 超时 (rc=9)。相关的 host 命令确实返回一个带有 NXDOMAIN 的非零 rc,但它的行为有点不一致,脚本很乱,输出更难解析。

一个穷人的错误检查版本(受 tripleee 的评论启发)根据您的 host 命令可能稍微更健壮:

DOMAIN=gmail.com
if ! host -t any $DOMAIN >/dev/null 2>&1 ; then
echo "no such domain"
elif ! host -t mx $DOMAIN >/dev/null 2>&1; then
echo "no MX records"
else
dig +short $DOMAIN mx | sort -n | nawk '{print $2; exit}' | dig +short -f -
fi

(相反地,对于 -t mx,您可能需要 版本的 host (bind-8.x) 测试工作,较新的版本只是返回 0。)

这正是人们开始 紧张地后退 问你为什么不用perl/python/$的时候MFTL.

如果您真的需要用 bash 编写一个健壮的版本,请查看 djbdns CLI 工具和 debugging tools这更容易解析(尽管遗憾的是也不要设置用户退出代码)。

关于bash - 如何从 Bash 中的域获取主 MX IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com