Скрипт, запрашивающий список доменов для записей MX, а затем запрашивающий ответы для IP-адресов?

Вы читали Документацию ? Я вижу две проблемы в вашем сообщении.

Во-первых, вы утверждаете, что обе Системы имеют одинаковое доменное имя, как и требовалось. Однако на скриншоте видно, что ваше доменное имя AD — LAGOON.local, а не MYDOMAIN.intranet, как для вашего сервера Univention.

Во-вторых, ваш файл журнала показывает, что вы -снова -пытаетесь использовать своего простого пользователя домена myuser, а не администратора домена AD Admin. У этого пользователя просто нет необходимых прав для доступа к Данным всего вашего домена AD.

Нам проще помочь вам с этими вопросами, касающимися Univention, на нашем форуме. Мы не можем гарантировать поддержку наших Продуктов на внешних форумах.

0
18.12.2019, 18:21
5 ответов

BIND's dig, конечно, не единственный существующий инструмент.

С набором инструментов djbdns Даниэля Дж. Бернштейна это всего одна -строчка:

% cat domains.txt
freebsd.org.
% 
% xargs dnsmx < domains.txt | sed -E -e 's/[[:digit:]]+ //' | xargs dnsip
96.47.72.85
96.47.72.80
%

Дополнительная литература

  • Даниэль Дж. Бернштейн (1999 ).dnsmx. djbwares .
  • Даниэль Дж. Бернштейн (1999 ).dnsip. djbwares .
0
28.01.2020, 02:38

Файл domains.txt:

freebsd.org
redhat.com
yahoo.com
google.com

Однострочная команда для получения подробной информации:

NAMESERVER="4.2.2.2"; for i in $(cat domains.txt|xargs); do IFS=$'\n'; for LINE in $(host -t mx ${i} ${NAMESERVER}|grep 'mail is handled by'); do IP=$(host -t A $(echo "${LINE}"|awk '{print $NF}') ${NAMESERVER}|grep 'has address'|awk '{print $NF}'|xargs); echo "${LINE} [${IP}]"; done; IFS=' '; done

Вывод, одна строка на запись MX (домен может иметь несколько записей MX, также одно имя MX может соответствовать нескольким IP-адресам):

freebsd.org mail is handled by 10 mx1.freebsd.org. [96.47.72.80]
freebsd.org mail is handled by 30 mx66.freebsd.org. [96.47.72.85]
redhat.com mail is handled by 10 us-smtp-inbound-1.mimecast.com. [207.211.30.107 207.211.30.237 205.139.110.221 205.139.110.242 205.139.110.141 205.139.110.145 205.139.110.181 205.139.110.102 205.139.110.107 205.139.110.177 207.211.30.221 207.211.30.242 207.211.30.141 207.211.30.145 207.211.30.181 207.211.30.102]
redhat.com mail is handled by 10 us-smtp-inbound-2.mimecast.com. [205.139.110.145 207.211.30.237 205.139.110.141 207.211.30.221 207.211.30.145 205.139.110.221 207.211.30.181 205.139.110.177 205.139.110.102 207.211.30.141 207.211.30.242 205.139.110.242 205.139.110.181 205.139.110.107 207.211.30.102 207.211.30.107]
yahoo.com mail is handled by 1 mta6.am0.yahoodns.net. [67.195.204.73 67.195.228.106 67.195.228.110 67.195.228.111 67.195.204.79 98.136.96.75 67.195.204.77 67.195.204.72]
yahoo.com mail is handled by 1 mta7.am0.yahoodns.net. [98.136.96.75 67.195.228.111 67.195.204.74 67.195.228.94 67.195.204.77 98.136.96.76 67.195.228.110 67.195.228.109]
yahoo.com mail is handled by 1 mta5.am0.yahoodns.net. [98.136.96.91 67.195.204.77 67.195.228.110 98.136.96.77 98.136.96.74 67.195.204.74 67.195.204.73 67.195.204.79]
google.com mail is handled by 20 alt1.aspmx.l.google.com. [64.233.177.27]
google.com mail is handled by 30 alt2.aspmx.l.google.com. [173.194.68.26]
google.com mail is handled by 10 aspmx.l.google.com. [74.125.69.26]
google.com mail is handled by 50 alt4.aspmx.l.google.com. [64.233.186.26]
google.com mail is handled by 40 alt3.aspmx.l.google.com. [173.194.214.27]

Однострочная команда для получения только списка IP-адресов:

NAMESERVER="4.2.2.2"; for i in $(cat domains.txt|xargs); do IFS=$'\n'; for LINE in $(host -t mx ${i} ${NAMESERVER}|grep 'mail is handled by'); do host -t A $(echo "${LINE}"|awk '{print $NF}') ${NAMESERVER}|grep 'has address'|awk '{print $NF}'; done; IFS=' '; done

Вывод, просто соберите IP-адреса и напечатайте их по одному в строке:

96.47.72.80
96.47.72.85
207.211.30.181
205.139.110.242
205.139.110.102
205.139.110.107
205.139.110.141
...

есть длинный список ips 63 всего.

0
28.01.2020, 02:38

Путь:

arr=( $MX )
for ((i=1; i<${#arr[@]}; i+=2)); do dig A +short "${arr[i]}"; done

 Вывод:

108.177.15.26
209.85.233.27
172.253.118.27
108.177.97.26
173.194.202.26
2
28.01.2020, 02:38

Следующая команда возвращает только список имен хостов (она обрезает вес и конечную точку):

MX_HOSTS=$(dig MX google.com +short | sed 's/.* \(.*\)\.$/\1/')

Затем вы можете выполнить цикл for для этого:

for h in ${MX_HOSTS} ; do
  MX_IPS="${MX_IPS} $(dig $h +short)"
done

И проверьте с помощью:

[[ "${MX_IPS}" =~ "${CHECK_IP}" ]] && echo "yes" || echo "no"
0
28.01.2020, 02:38

Немного изменил его, чтобы адресовать URL-адрес записи MX вместо IP, но решил поделиться, если другим это может быть полезно.

#!/usr/bin/env bash
# Bulk DNS Lookup

# File name/path of domain list:
domain_list='domains.txt' # One FQDN per line in file.

# File name of output text
output='ns_output.txt'

# Clears previous output
> $output

# IP address of the nameserver used for lookups:
ns_ip='192.168.85.54'
#
# Seconds to wait between lookups:
loop_wait='1' # Is set to 1 second.

for domain in `cat $domain_list` # Start looping through domains
  do
    MX=$(dig @$ns_ip MX $domain +short) #query MX records from domain list and store it as variable $MX
    #echo $MX >> $output;
    #echo $domain >> $output;
    arr=( $MX ) #creates array variable for the MX record answers
    echo ${arr[1]} >> $output; #outputs only one record from above MX dig
    
    : '
    for ((i=1; i<${#arr[@]}; i+=2)); #since MX records have multiple answers, for loop goes through each answer
      do
        #echo $domain >> $output;
        echo ${arr[i]} >> $output; #outputs each A record from above MX dig
        #dig A +short "${arr[i]}" >> $output #queries A record for IP and writes answer
      done
    '

  done;
0
27.01.2021, 19:14

Теги

Похожие вопросы