Запустите пакетный поиск DNS + Whois на терминале с выводом - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь объединить пакетный поиск для некоторых записей DNS с поиском Whois на моем терминале. У меня есть файл CSV со списком доменов, и я хотел бы запустить следующие пакетные поисковики:

  • MX поиск: host -t mx $domain
  • NS поиск: host -t ns $domain

Это довольно легко.

Объедините это с Whois Search; Который возвращает только сводку некоторых данных Whois, мне нужно было бы запросить у whois-сервера домен, который в порядке: Whois

Я могу использовать -h, чтобы записывать только данные о владельце домена, такие как телефон, код страны и т. Д. Я пробовал это:

  • Whois: whois -h 'Registrar WHOIS Server:' "domain" Который также дает мне вывод только для регистрантов.

Поэтому, когда я объединяю все в один файл bash, я получаю:

#!/usr/bin/env bash

file="${1:-input_test1.csv}"

if [[ ! -f "$file" ]]; then
    printf 'No file: %s\n' "$file" >&2
    exit 1
fi

(
  read -r header; printf '%s\n' "$header"
  while IFS=, read -r domain; do
    mx="$(host -t mx "$domain" | sort | head -1)"
    ns="$(host -t ns "$domain" | sort| head -1)"
    whois="$(whois -h "$(whois" "$domain" | grep 'Registrar WHOIS Server:') "$domain")
    printf '%s,"%s"\n' "$domain" "$mx" "$ns" "$whois"
  done
) < "$file"

Я хотел бы получить вывод CSV с доменом, mx (только 1), NS (только 1), whois whois - это данные о владельце регистрации, показанные ниже;

Пример ожидаемого вывода Screengrab

Спасибо.

1 Ответ

0 голосов
/ 16 января 2019

Вы уже знаете, что разные домены указывают на разные серверы whois. Я думаю, вы обнаружите, что у каждого регистратора есть свой любимый способ представления информации через whois, и что они не согласованы. ICANN требует, чтобы через whois был доступен минимальный набор данных, но некоторые данные, которые вы ищете, могут выходить за пределы этого набора.

Ниже приведены только основные данные из whois.internic.net, которые можно использовать для сбора DNS-серверов, whois-серверов и MX:

#!/usr/bin/env bash

mapfile -t domains < domains.lst

declare -i i
for this in "${domains[@]}"; do
  unset a; declare -A a=()
  unset ns; declare -a ns=()
  whois=""
  i=0
  while IFS=: read -r key value; do
    #printf "key=%s / value=%s\n" "$key" "$value"
    case "$key" in
      *"Registrar WHOIS Server") whois="${value## }" ;;
      *"Name Server") ns+=("${value## }") ;;
    esac
  done < <(whois -h whois.internic.net "$this")
  read mx < <(host -t mx "$this" | sort | awk 'NR==1{print $NF}')

  printf '%s,%s,%s,%s\n' \
    "$this" \
    "$mx" \
    "$whois" \
    "$(printf '%s ' "${ns[@]}")"
done

Если вы действительно хотите попробовать извлечь данные из whois на $whois, приведенный выше скрипт должен показать вам, как вы можете сделать это для каждого домена в вашем списке.

...