Shell-Script
為什麼 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)
結果是一樣的,結果不可靠,有時有效,有時無效。
它可以正常工作,但並非總是如此。有時它讀取第 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 地址,你可能想要那個