Shell-Script

為什麼 nslookup 腳本會給出不同的結果?

  • February 11, 2022

我嘗試使用名稱解析並獲取網站的 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)

結果是一樣的,結果不可靠,有時有效,有時無效。

它可以正常工作,但並非總是如此。有時它讀取第 7 行,而不是第 6 行並失敗。

實際上我用另一種方​​法解決了我的問題:

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

每次都給出正確的線路和 IP 地址(儘管它可以提供多個 IP > nslookup 可以返回多個 IP

為什麼前兩個程式碼失敗?

用於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

你可以給一個host指揮的機會。由於通常可以將多個 IP 與主機名相關聯,因此您可能會對第一個 IP 感到滿意。

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

這似乎更可靠

sed 1q過濾除第一行之外的所有行, awk '{ print $NF }'列印出你想要的最後一個 IP 欄位,並 -4指示使用 ipV4 地址,你可能想要那個

引用自:https://unix.stackexchange.com/questions/690280