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

Est*_*spi 4 networking script bash

我想用给定远程主机的 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-`
Run Code Online (Sandbox Code Playgroud)

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

  1. 是否有一个简单的工具可以获得相同的结果?我需要它通过限制主机名的代理工作,这就是我使用网络工具页面的原因。
  2. 我怎样才能使它成为主机名的函数?类似于 getIP(hostname)

use*_*ser 5

尝试类似的东西

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

这会给你:

  • 对于具有至少一个 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`
Run Code Online (Sandbox Code Playgroud)

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

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