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

Bon*_*rse 20 networking dns command-line command-line-arguments

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

nslookup myip.opendns.com resolver1.opendns.com
Run Code Online (Sandbox Code Playgroud)

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

Server:  resolver1.opendns.com
Address:  208.67.222.222

Non-authoritative answer:
Name:    myip.opendns.com
Address:  123.123.123.123
Run Code Online (Sandbox Code Playgroud)

我希望它只输出:123.123.123.123

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

小智 38

nslookup从来没有真正打算用于脚本使用。您确实想dig改用它,它与该+short选项一起根据查询参数生成机器可读的输出。

dig +short myip.opendns.com @resolver1.opendns.com
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案比使用“awk”和/或“sed”的其他解决方案更可取,因为管道通常会出现问题,并且在这种情况下,不必要地复杂。 (3认同)
  • 那么我应该使用最后一条输出线吗?如果是 CNAME,则有两个或更多输出行。`挖掘 +short www.getready.cz | 尾巴-1` (3认同)

JNe*_*ill 8

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

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

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

  • OP 没有指定,但我敢打赌他在 Windows 上,并且在 Windows 中没有 `awk`。 (2认同)
  • @Techie007 但是 OP 也没有指定他在 Windows 上,所以我们不妨提供完整的信息。上面的答案适用于所有 Nixes,它很好地补充了其他回复,包括您的回复。 (2认同)
  • 这在某些情况下不起作用(硬编码的行号可能是错误的)。我改用这个:```nslookup-ip() { nslookup "$@" | 尾 -n +3 | sed -n 's/地址:\s*//p' }``` (2认同)

Dav*_*ill 7

使用 A 记录 IP 作为唯一输出的 Nslookup

假设您使用的是 Windows,这可以使用一个简单的单行命令来完成。

从命令行:

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

从批处理文件:

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

笔记:

  • 公共 IP 地址存储在文件 ( ip.txt) 中。
  • 以上不需要像PowerShell,.Netawk.

进一步阅读

  • “假设您使用的是 Windows”……我不确定这是否应该成为这里的假设。 (2认同)

Ƭᴇc*_*007 6

如果您使用的是 Windows,并且安装了 PowerShell(v1 或更高版本)(以及 .Net 版本),您可以使用如下的(长)一行:

[System.Net.Dns]::GetHostAddresses("www.google.com")[0] | Select IPAddressToString -ExpandProperty IPAddressToString | Out-File c:\folder\filename.txt

这将查找 www.google.com 并将第一个返回的 IPv4 地址放入文件中。

如果您在 Windows 8+(或 Server 2012+)上使用 PowerShell v3+,您可以使用 cmdletResolve-DnsName而不是 .Net GetHostAddress 调用。IE:

(Resolve-DnsName www.google.com)[0] | Select IPAddressToString -ExpandProperty IPAddressToString | Out-File c:\folder\filename.txt

只需将 www.google.com 更改为您首选的域名即可。或者将其放入 PowerShell 脚本中并将其设置为接受参数(您要查找的域名的参数)。

更多信息:How to pass an argument to a PowerShell script?