Чтобы получить ровно 0 или 1 ответов:
dig +short gmail.com mx | sort -n | nawk '{print $2; exit}' | dig +short -f -
Вам нужно не-древний , который поддерживает +short
.
Как уже отмечалось, может быть несколько «первичных» MX, поскольку предпочтения не обязательно должны быть уникальными. Если вы хотите, чтобы все IP-адреса всех низших привилегированных записей, то:
dig +short oracle.com mx | sort -n |
nawk -v pref=65536 '($1<=pref) {pref=$1; print $2}' |
dig +short -f - | uniq
Это не обрабатываем случай, когда нет записи MX и запись принимает электронную почту, необычное, но вполне допустимая конфигурация.
К сожалению, все версии Я протестировал return 0, существует ли домен или нет (NXDOMAIN), и существуют ли какие-либо записи MX или нет. Вы можете поймать тайм-аут DNS (rc = 9). Соответствующая команда host
делает возвращает ненулевой rc с NXDOMAIN, но его поведение немного непоследовательно, оно бесполезно для скрипта, а результат сложнее разобрать.
проверки ошибок версия бедняка (вдохновленный tripleee «s комментарий), которые могли бы быть немного более надежным в зависимости от вашей команды 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
(Упрямо, может потребоваться старше версия host
(bind-8.x
) для теста -t mx
работать, новые версии просто возвращает 0 вместо.)
Это примерно точка люди начинают
нервно откликается
спрашивает, почему вы не используете perl
/python
/$MFTL
.
Если вы действительно нужно написать надежную версию в Баш, проверьте djbdns CLI инструменты и debugging tools, которые достаточно легко разобрать (хотя, к сожалению, не установлены коды выхода пользователей либо).
+1 специально для 'dig -f -'. Это, очевидно, хрупкое; ошибка в любом месте конвейера должна быть обработана, и я полагаю, что есть записи MX с голыми IP-адресами, хотя это должен быть CNAME. – tripleee