nslookupスクリプトが異なる結果を提供するのはなぜですか?

nslookupスクリプトが異なる結果を提供するのはなぜですか?

名前解決を使用してウェブサイトのIPアドレスを取得しようとしました。使ったnslookupコマンドを実行し、出力の6行目を使用します。なぜなら、nslookup出力の6行にIPアドレス(IPv4)が含まれていることがわかったからです。私のコマンドは次のとおりです。

website=<somewebsiteURL>
IP=$(nslookup "$website" | head -n 6 | tail -n 1 | cut -d" " -f2)

また、同じ目標を達成するためにsedコマンドを試してみました。

website=<somewebsiteURL>
IP=$(nslookup "$website" | sed -n 6p | cut -d" " -f2)

結果は同じで、結果は信頼できず、時には動作し、時には動作しません。

うまくいきますが、必ずしもそうではありません。時には6行ではなく7行を読み、失敗します。

実際、私は別の方法で問題を解決しました。

website=<somewebsiteURL>
newIP=$(nslookup "$website" | grep "Address: " | head -n 1 | cut -d" " -f2)

毎回正しい回線とIPアドレスを提供します(複数のIPを提供できますが、>nslookupは複数のIPを返すことができます。)

最初の2つのコードが失敗するのはなぜですか?

答え1

grep有効なIPv4アドレスと「似た」文字列を解析するために使用されます。

nslookup unix.stackexchange.com | grep -Eo '([0-9]{1,3}[.]){3}[0-9]{1,3}[^#]'
151.101.129.69
151.101.1.69
151.101.193.69
151.101.65.69

次のようなものを使用して、dig外部解析ツールなしで必要な情報を直接出力できます。

dig +short A unix.stackexchange.com
151.101.65.69
151.101.129.69
151.101.193.69
151.101.1.69

答え2

命令的な機会を与えることができますhost。複数のIPがホスト名に関連付けられていることが多いので、おそらく最初のIPに満足するでしょう。

host -4 cnn.com | sed 1q  | awk '{ print $NF }'
151.101.129.67

これはもっと信頼できるようです。

sed 1q最初の行を除くすべての項目をフィルタリングし、目的の awk '{ print $NF }'IPである最後のフィールドを印刷し、 -4ipV4アドレスを使用するようにマークします。

関連情報