我尝试使用名称解析并获取网站的 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 地址,您可能想要那个