Nslookup 命令行以 A 记录 IP 作为唯一输出

Nslookup 命令行以 A 记录 IP 作为唯一输出

我发现以下命令可以从命令行获取当前的公共 IP:

nslookup myip.opendns.com resolver1.opendns.com

我希望能够运行一个命令,只打印结果 IP。(现在它显示指定的 DNS 服务器及其 IP 以及所有其他信息,例如:

Server:  resolver1.opendns.com
Address:  208.67.222.222

Non-authoritative answer:
Name:    myip.opendns.com
Address:  123.123.123.123

我希望它只输出:123.123.123.123

不确定是否有命令行标志可以获取我想要的内容,或者我是否可以使用一些命令行技巧来获取我想要的输出(最终,我想将输出重定向到文件“> filename.txt”

答案1

Nslookup 以 A 记录 IP 作为唯一输出

如果您使用的是 Windows,则可以使用 CMD 中的一行命令完成此操作。

直接从命令提示符:

for /f "usebackq skip=4 tokens=2" %a in (`nslookup myip.opendns.com resolver1.opendns.com`) do echo %a > ip.txt

对于批处理文件,将%符号加倍:

for /f "usebackq skip=4 tokens=2" %%a in (`nslookup myip.opendns.com resolver1.opendns.com`) do echo %%a > ip.txt

笔记:

  • 公网 IP 地址存储在文件 ( ip.txt) 中。
  • 以上内容不需要非标准 Windows 命令(如PowerShell.Net或 )awk

进一步阅读

答案2

nslookup从未真正打算用于脚本。您真正想要的是使用dig,它带有+short选项,可根据查询参数生成机器可读的输出。

dig +short myip.opendns.com @resolver1.opendns.com

答案3

这是 awk 的一个很好的用例。

nslookup myip.opendns.com resolver1.opendns.com | awk -F': ' 'NR==6 { print $2 } '

这里我们通过管道传输到 awk,以“:”分隔,然后仅输出第 6 行的第二个分隔字段。

答案4

在我的 Linux 机器上效果很好。虽然我从未在其他系统上尝试过,但谷歌上有很多关于如何安装的文章,dig例如视窗

唯一需要注意的是,对于本地主机名,应明确添加搜索域。因此,如果您myhost的本地网络中有带有搜索域的主机,请mynetwork输入

dig +short myhost.mynetwork

在命令行上。

例子:

sergeyi@sergeyi:~$ dig +short google.ru
173.194.222.94

sergeyi@sergeyi:~$ dig A +short google.ru
173.194.222.94

sergeyi@sergeyi:~$ dig AAAA +short google.ru
2a00:1450:4010:c0b::5e

相关内容