2013-03-04 7 views
0

Я пытаюсь написать сценарий bash, который будет от имени домена найти его записи MX, из них выяснить, что является основным (они не всегда в порядке), а затем найти свой IP-адрес. (при наличии более одного первичного MX первым нашел бы нормально)Как получить первичный IP-адрес MX из домена в Bash

Например:

./findmxip.sh gmail.com 

Даст мне 173.194.71.26. Для этого мне нужно разместить gmail.com , а затем найти основной MX в результатах и ​​разместить его, получив свой IP-адрес.

ответ

6

Чтобы получить ровно 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

+1 специально для 'dig -f -'. Это, очевидно, хрупкое; ошибка в любом месте конвейера должна быть обработана, и я полагаю, что есть записи MX с голыми IP-адресами, хотя это должен быть CNAME. – tripleee

 Смежные вопросы

  • Нет связанных вопросов^_^