只是尝试创建一个bash脚本,它将在文件中列出IP列表,然后对每个文件运行'dig -x',然后使用awk只获取它返回的IP和主机名并将其转换为新的文件。
所以IP列表是hosts.txt,到目前为止我有:
#!/bin/bash
IPLIST="./hosts.txt"
for IP in $( cat $IPLIST ); do
dig -x $IP | awk 'match($0, /192.168.*/)
{print substr($0, RSTART, RLENGTH)}'
这样可以很好地从dig输出中获取IP地址,但我不太确定如何获取第二个搜索词,然后将其吐出来,所以它基本上是:
192.168.1.5 == hostname.domain.com
dig命令的原始输出是:
dig -x 192.168.1.5
<<>> DiG 9.8.3-P1 <<>> -x 192.168.1.5
global options: +cmd
Got answer:
->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 22854
flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
QUESTION SECTION:
5.1.168.192.in-addr.arpa. IN PTR
AUTHORITY SECTION:
168.192.in-addr.arpa. 300 IN SOA hostname.domain.com.
hostmaster.domain.com. 1117231 10800 3600 2419200 300
Query time: 3 msec
SERVER: 10.168.1.20#53(10.168.1.20)
WHEN: Mon Dec 5 13:38:13 2016
MSG SIZE rcvd: 118
任何人都可以告诉我如何调整这个以便我可以使用我在同一行上使用主机名的IP来格式化输出吗?
答案 0 :(得分:0)
无需使用解析此输出,因为您可以使用dig +short
来获取输出中的主机名。
您的脚本可以只是:
#!/bin/bash
iplist="./hosts.txt"
while read -r ip; do
printf "%s == %s\n" "$ip" "$(dig +short -x $ip)"
done < "$iplist"