获取远程主机 IP 地址的脚本或工具

获取远程主机 IP 地址的脚本或工具

我想用给定远程主机的 IP 地址设置环境变量。这是我找到的解决方案:

export IP=`curl http://network-tools.com/default.asp?host=www.example.com | 
       grep -oE '<br>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | 
       cut -c5-`

它工作正常,但我有几个问题:

  1. 有没有简单的工具可以达到同样的效果?我需要它通过限制主机名的代理来工作,这就是我使用网络工具页面的原因。
  2. 我怎样才能使其成为主机名的函数?类似 getIP(hostname)

答案1

尝试类似

export IP=`( dig ${HOSTNAME} A +short | tail -n1; \
             dig ${HOSTNAME} AAAA +short | tail -n1 ) \
           | head -n1`

这将为您提供:

  • 对于具有至少一个 IPv4 地址的主机,IPv4 地址之一
  • 对于没有 IPv4 地址但至少有一个 IPv6 地址的主机,IPv6 地址之一
  • 对于 DNS 中根本没有(IPv4 或 IPv6)地址的主机,或者解析器发生故障,则为空值

如果您不需要 IPv4 或 IPv6 功能(您的问题似乎表明您最感兴趣的是 IPv4 地址),只需删除该dig命令(A是 IPv4,AAAA是 IPv6)。因此,如果您只对 IPv4 地址感兴趣:

export IP=`dig ${HOSTNAME} A +short | tail -n1`

确保tail -n1您获得 IP 地址(在 的情况下CNAME,以及可能的其他记录类型,dig在第一行输出引用的规范名称)。head -n1通过仅返回剩余输出的第一行,确保您仅获得单个地址(在只有一个地址系列的情况下不需要,因为tail将仅返回一个地址)。 由于 DNS 记录通常以循环方式提供,因此无法保证将为多地址主机返回哪个确切的地址。

我不太熟悉编写 bash 函数,但将其转换为函数应该相对容易。

答案2

请尝试以下操作:

  • host www.example.com
  • nslookup www.example.com
  • dig www.example.com

根据您需要的附加信息量,选择合适的候选人。

相关内容