Bash全域IP地址列表

我正在试图给出一个给定域名的所有可能的IP地址列表。 我认为我很接近,但不知道我错过了什么(或者如果有更好的方法)。

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

 webkinz.com
 www.webkinz.com

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

 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)

我的IP文件如下所示:

  66.48.69.100 www.webkinz.com.edgesuite.net.a1339.g.akamai.net.

只有3个问题。 :-(

  • 挖掘返回的域时,我只希望IP地址。
  • 一些如何我的脚本删除域之间的空间。
  • 来自dig www.webkinz.com一些ip地址丢失了。
  • 那么,我该怎么做? 难道我不知道如果挖掘返回另一个域,而不是一个IP地址,并在该域上运行挖掘? 我是否忽略从dig返回的域名并且指出ip地址是足够的? 我想捕捉每个可以解析域名的IP地址。 我不认为这应该很难。 有任何想法吗?


    为了获得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
    

    要么

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

    在没有引用参数的情况下使用echo会除去最后的行。

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


    如果不是IP地址,请在脚本中使用以下修改来解析DNS名称

    while read domain; do
        IPs=`dig $domain | grep $domain | grep -v ';' | awk '{ print $5 }'`;
    
        # detect if '$IPs' is an ip address 
        grep "([0-9]{1,3}.){3}[0-9]{1,3}" <(echo $IPs) >/dev/null 2>&1
    
        if [ $? -eq 0 ]; then 
            # if IPs is an ip address add it to the file   
            echo " ${IPs}" >> /tmp/IPs; #array          
        else 
            # if not, resolve the domain name using the 'host' command (take just the first line using 'head -1') 
            host $IPs | grep "has address" | head -1 | awk '{ print $4 }' >> /tmp/IPs
        fi
    
    done < mylist
    

    dig提供了不同类型的响应,所以第五列可能包含域名。 只有当响应行是A响应时,第五列才是IP地址。 我会建议:

    dig -t A $domain
    

    代替

    dig $domain
    

    限制类型。

    链接地址: http://www.djcxy.com/p/60765.html

    上一篇: Bash comprehensive list of IP addresses for a domain

    下一篇: Search structure with history (persistence)