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个问题。 :-(
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