7

特定のドメイン名で使用可能なすべての IP アドレスのリストを作成しようとしています。私は近いと思いますが、何が欠けているのかわかりません (または、より良い方法があるかどうか)。

まず、次のようにドメインのバリエーションのリストを作成します。

 webkinz.com
 www.webkinz.com

次に、このリストをループして、次のように各バリエーションで dig を実行します。

 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つ。:-(

  1. IPアドレスしか期待していなかったときに、返されたドメインを掘り下げます。
  2. 私のスクリプトがドメイン間のスペースをどのように削除したか。
  3. からの IP アドレスの一部dig www.webkinz.comが欠落しています。

それで、どうすればいいですか?dig が IP アドレスではなく別のドメインを返したかどうかをどうにかして把握し、そのドメインで dig を実行しますか? dig から返されたドメイン名を無視して、IP アドレスで十分だと判断するだけですか? 可能であれば、ドメインに解決されるすべての IP アドレスをキャッチしたいと考えています。こんなに大変だとは思いませんでした。何か案は?

4

4 に答える 4

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

また

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

引用符で囲まれていない引数で echo を使用すると、最後を除いて改行が削除されます。

中間変数や一時ファイルは必要ありません。

于 2012-06-21T00:33:26.330 に答える
0

が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
于 2012-06-20T22:18:20.923 に答える
0

digさまざまなタイプの応答が返されるため、5番目の列にドメイン名が含まれている可能性があります。5番目の列は、応答行が応答の場合にのみIPアドレスになりますA。私は提案します:

dig -t A $domain

それ以外の

dig $domain

タイプを制限します。

于 2012-06-20T22:19:43.397 に答える
0

これはすでに回答済みです。ただし、IPv4 および IPv6 アドレスのリストについては、これを試してください。

脚本:

info=$(host google.com); echo "$info" | grep "has address" | awk '{print $4}'; echo "$info" | grep "IPv6" | awk '{print $5}'

host - get the IP addresses
grep - filter the addresses
awk - print the correct strings

スクリプト (少ない行):

host google.com | awk '/address/ {print $NF}'

出力:

74.125.45.102
74.125.45.113
74.125.45.138
74.125.45.139
74.125.45.100
74.125.45.101
2607:f8b0:4002:c01::8a
于 2012-09-30T20:47:12.650 に答える