如何从Amazon主机名中提取IP地址?


0

我真的不知道为什么,但亚马逊网络服务为我的机器提供了一些奇怪的主机名。现在我需要用刀子列出所有它们以在bash脚本中使用。我说IP很奇怪,因为没有地方你可以解析主机名,毕竟这是没用的。

在我的脚本中,我想从主机名中仅提取IP。例如,从以下主机名中提取10.114.152.134:

ip-10-114-152-134.valter.henrique.com

我怎样才能做到这一点?


2
澄清ip-10-114-152-134.valter.henrique.com一下,亚马逊为您提供的“怪异主机名”,您想要从中提取IP地址吗?
Daniel Beck

你能不能ping主机名?
slhck 2013年

1
@slhck如果您正在谈论通过DNS查找从主机名获取IP,那么nslookupdig或者host)更多。
鲍勃

Answers:


3

这个片段肯定可以改进,但它应该做的工作:

hostname=ip-10-114-152-134.valter.henrique.com
hostip=$(echo ${hostname%%.*} | sed -e 's/ip-//' -e 's/-/./g')

${hostname%%.*}删除第一个之后(包括).; sed然后删除开始ip-并用点替换破折号。


您也可以只使用一个sed命令:

echo ip-10-114-152-134.valter.henrique.com | sed 's/ip-\(.*\)-\(.*\)-\(.*\)-\(.*\)\.valter\.henrique\.com/\1.\2.\3.\4/'

第一个括号中的正则表达式(您需要转义这些 \(.*\):)将被分配给\1依此类推。


这是最后一个变体,仅使用bash函数:

IFSsave="$IFS"; IFS=-                            # save IFS prior modifying it
hostip=""
hostname=ip-10-114-152-134.valter.henrique.com   # initial values
hostname=${hostname#*-}                          # remove the "ip-" part
hostname=${hostname%%.*}                         # remove the ".valter.henrique.com" part
for i in $hostname; do                           # loop over 10-114-152-134, splitted at "-" ($IFS)
   hostip="${hostip}${i}."                       # append number. to $hostip
done
hostip=${hostip%.}                               # remove trailing dot
echo $hostip                                     # print resulting IP
IFS="$IFSsave"                                   # restore IFS

3

这不如mpy的Bash唯一变化那么强大,因为它假设IP地址部分总是处于相同的位置,但它更短,更快一点。

hostname=ip-10-114-152-134.valter.henrique.com
IFSsave=$IFS
IFS=.-
parts=($hostname)
hostip="${parts[*]:1:4}"
IFS=$IFSsave
echo "$hostip"

*在引号内使用数组下标会导致IFS在数组的每个元素之间插入第一个字符。设置IFS为两个字符会导致拆分在其中任何一个上完成。

顺便说一句,该域名对我来说就是这样解决的:

$ host ip-10-114-152-134.valter.henrique.com
ip-10-114-152-134.valter.henrique.com has address 208.91.197.27

地址10.114.152.134是私有IP,不能通过互联网路由。它可能只能在AWS网络内访问。


这很优雅 - 特别是那个parts[*]技巧。但是parts=($d),我的意思是做什么$d或应该读$hostname什么?
MPY

@mpy:这是一个错字。我会解决它。谢谢。我也意识到IFS只需要设置一次。
丹尼斯威廉姆森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.