为什么 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)

结果是一样的,结果不可靠,有时有效,有时无效。

它工作正常,但并不总是如此。有时它会读取第 7 行,而不是第 6 行并失败。

实际上我用另一种方法解决了我的问题:

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

每次都给出正确的线路和 IP 地址(尽管它可以给出多个 IP >nslookup可以返回多个IP

为什么前两个代码失败?

答案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,并 -4指示使用 ipV4 地址,您可能想要那个

相关内容