我发现以下命令可以从命令行获取当前的公共 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
。
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/f- 循环命令以执行另一个命令的结果。
- nslookup- 在名称服务器上查找 IP 地址。
答案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