Bash域的IP地址的完整列表

exv*_*nce 7 bash awk grep sed

我正在尝试为给定的域名生成所有可能的IP地址列表.我想我很接近,但不知道我错过了什么(或者是否有更好的方法).

首先,我创建一个域的变体列表,如下所示:

 webkinz.com
 www.webkinz.com
Run Code Online (Sandbox Code Playgroud)

然后我循环遍历此列表并对每个变体进行挖掘,如下所示:

 while read domain; do
    IPs=`dig $domain | grep $domain | grep -v ';' | awk '{ print $5 }'`;
    echo " ${IPs}" >> /tmp/IPs; #array
 done < /tmp/mylist

 sort -u /tmp/IPs > /tmp/TheIPs; #remove duplicates
 cat /tmp/TheIPs| tr -d "\n" > /tmp/IPs  #remove new lines (making it 1 long line)
Run Code Online (Sandbox Code Playgroud)

我的IP文件如下所示:

  66.48.69.100 www.webkinz.com.edgesuite.net.a1339.g.akamai.net.
Run Code Online (Sandbox Code Playgroud)

只有3个问题.:-(

  1. 当我只期待ip地址时,Dig返回域名.
  2. 我的脚本如何删除域之间的空格.
  3. dig www.webkinz.com缺少部分IP地址.

那么,我该怎么做呢?我是否以某种方式弄清楚dig是否返回了另一个域而不是ip地址并在该域上运行dig?我是否只是忽略从dig返回的域名,并确定IP地址是否足够?我希望抓住每个可以解析到域名的IP地址.我认为不应该这么难.有任何想法吗?

Pau*_*ce. 4

为了仅获取 IP 地址,请使用dig +short

#!/bin/bash
while read -r domain
do
    dig +short "$domain"
done < /tmp/mylist | sort -u | awk '{printf "%s ", $0} END {printf "\n"}' > outputfile
Run Code Online (Sandbox Code Playgroud)

或者

#!/bin/bash
echo $(xargs -a /tmp/mylist dig +short | sort -u) > outputfile
Run Code Online (Sandbox Code Playgroud)

将 echo 与不带引号的参数一起使用会删除除末尾之外的换行符。

您不需要任何中间变量或临时文件。