我想用给定远程主机的 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-`
它工作正常,但我有几个问题:
- 有没有简单的工具可以达到同样的效果?我需要它通过限制主机名的代理来工作,这就是我使用网络工具页面的原因。
- 我怎样才能使其成为主机名的函数?类似 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
根据您需要的附加信息量,选择合适的候选人。