Bash 运行批处理DNS+;带输出的终端上的搜索是谁

Bash 运行批处理DNS+;带输出的终端上的搜索是谁,bash,shell,csv,dns,whois,Bash,Shell,Csv,Dns,Whois,我正在尝试将对某些DNS记录的批量搜索与我的终端上的Whois搜索结合起来。我有一个包含域列表的CSV文件,我想运行以下批处理搜索程序: MX搜索:host-t MX$domain NS搜索:host-t NS$domain 这很容易 结合Whois搜索;只返回Whois部分数据的摘要;我需要为域查询whois服务器,如下所示: 谁 我可以使用-h,只记录域注册人的详细信息,如电话、国家代码等。我尝试过以下方法: Whois:Whois-h'注册商Whois服务器:'“域” 这给了我的输出

我正在尝试将对某些DNS记录的批量搜索与我的终端上的Whois搜索结合起来。我有一个包含域列表的CSV文件,我想运行以下批处理搜索程序:

  • MX搜索:
    host-t MX$domain
  • NS搜索:
    host-t NS$domain
这很容易

结合Whois搜索;只返回Whois部分数据的摘要;我需要为域查询whois服务器,如下所示: 谁

我可以使用
-h
,只记录域注册人的详细信息,如电话、国家代码等。我尝试过以下方法:

  • Whois:
    Whois-h'注册商Whois服务器:'“域”
    这给了我的输出,以及只有注册人的详细信息
因此,当我将所有内容合并到一个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"
#/usr/bin/env bash
file=“${1:-input_test1.csv}”
如果[!-f“$file”];然后
printf“没有文件:%s\n”“文件”>&2
出口1
fi
(
read-r头;printf'%s\n'$header
当IFS=,read-r domain;do
mx=“$(主机-t mx“$域”|排序|头-1)”
ns=“$(主机-t ns“$domain”|排序|头-1)”
whois=“$(whois-h”$(whois“$domain”| grep”注册器whois服务器:')“$domain”)
printf“%s”,“%s”\n“$domain”$mx“$ns”$whois”
完成
)<“$file”
我想得到一个CSV输出域,mx(仅1),NS(仅1),whois whois是注册人数据,如下所示


谢谢。

您已经知道,不同的域指向不同的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
!/usr/bin/env bash
mapfile-t domains完成hunt2.sh:line 2:mapfile:command not found hunt2.sh:line 16:unexpected token附近的语法错误
啊,可能您使用的是较旧版本的bash。
mapfile
命令是在bash 4中引入的,bash 4已经有十年的历史了。据我所知,目前唯一还在使用bash 3的现代操作系统是macOS。如果你使用macOS,你可以使用or安装bash 4。为了便于将来参考,通常最好将你使用的版本放在你的问题中,以避免被assu难倒mptions。谢谢你,ghoti,你太好了。我被bash更新到5后,我很乐意让脚本启动并运行。脚本正在运行并在终端上打印输出,但没有写入到文件中。我需要做些什么来将输出传输到文件或新文件中吗?通过运行一行程序和使用
whois-h$(whois example.com | grep | whois Server:| cut-f2--d:)可获得更多DNS数据我希望修改这里的部分:done
<我的荣幸-我希望每个人都与StackOverflow有着长期而有用的关系,高质量的长期问题是其中的一个重要部分。:)也就是说,解析包含在注释中的代码非常困难。如果你认为这段代码作为该问题的一部分,请编辑该问题并添加您的说明。如果您认为这是一个不同的问题,请这样做。一个包含太多部分的问题不可能得到完整的答案。