【问题标题】:Script To Look Up Nameservers On Multiple Domains在多个域上查找名称服务器的脚本
【发布时间】:2015-06-20 17:53:08
【问题描述】:

我正在将客户的 WHM / cPanel 帐户迁移到新服务器,但是他在服务器上托管了很多很多站点,我需要检索他们的名称服务器。

我想创建一个 bash 脚本来解析文件(每个域位于单独的行),执行 digwhois,找到名称服务器和 IP,然后输出域及其名称服务器到另一个文件。

我不太擅长 bash,但我找到并编辑了这个脚本 - 但它似乎根本不想工作。如果有人有任何见解,那就太好了。谢谢!

#!/bin/bash
# dig $line +short >> ip address 
# whois $line >> Lists full details including the name servers 
# whois $line | grep "Name Server" | cut -d ":" -f 2 | sed 's/ //' | 
# sed -e :a -e '$!N;s/ \n/,/;ta'`  
while read inputfile 
do 
echo $domain  
ipaddress=`dig $domain +short` 
nameserver=`whois $domain | grep "Name Server" | cut -d ":" -f 2 |    
sed 's/ //' | sed -e :a -e '$!N;s/ \n/,/;ta'` 
echo -e "$domain,$ipaddress,$nameserver" >> outputfile
done

【问题讨论】:

  • 你没有给第一个sed 命令提供任何输入数据来处理(尽管它看起来实际上是评论的一部分)。同样,您不会在while 循环中给read 命令提供任何要读取的数据(通常通过<input_file< <(process that generates data)done 行上的文件或类似文件重定向。
  • 是的,您确实是正确的,第一个sed 是为了成为评论。呃,我需要处理我的 bash。
  • inputfile 是否应该存在包含域的文件?因为read 的参数是将读取数据分配给文件/等的变量。从中读取数据。 read 默认从标准输入读取(因此read line <inputfile 会将inputfile 的第一行读入line 变量)。你可能想要while IFS= read -r linedone <inputfile 那里。请参阅mywiki.wooledge.org/BashFAQ/001 了解更多信息。
  • 嗯,这几乎让我到达了我需要的地方。非常感谢伊坦!现在唯一的问题是其中一些域是.br 并且whois 不返回名称服务器,呃。虽然没有什么可以帮助我的,哈哈。再次谢谢你!编辑:哇,我在想什么。我忘了dig ns。伙计,今天是星期五吗? :P
  • 您不应该使用 whois 来获取有效的域名名称服务器。 list 只需使用 DNS。

标签: bash sed whois dig


【解决方案1】:

这将输出给定文件中所有可能的域 A 和 NS 记录:

#!/bin/bash
while read domain 
do 

for a in `dig $domain a +short`
do
    ipaddress="$ipaddress$a,"
done

for ns in `dig $domain ns +short`
do
    nameserver="$nameserver$ns,"
done 
echo "$domain,$ipaddress,$nameserver"
done

用法

假设脚本被命名为解析器并且文件被输入。做

cat input | ./resolver

(某些域有多个IP地址和名称服务器)

【讨论】:

  • @EtanReisner 都是关于用例的!在这里,使用 for 循环是可以挖掘短输出的
  • 您可能知道,但 OP 可能不知道。使用for 阅读行是一种反模式,就我而言不应该使用。
  • 好吧,我马上改;)
猜你喜欢
  • 2013-07-12
  • 1970-01-01
  • 2018-08-09
  • 2011-11-22
  • 2019-04-07
  • 2020-12-22
  • 2010-11-24
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多