如何反向读取IP地址?

如何反向读取IP地址?

如果我们有这个字符串(IP地址):192.168.1.1

我怎样才能得出(DNS反向记录形式) 来自这个字符串,所以它会像1.1.168.192.in-addr.arpa使用 shell 脚本一样显示?

答案1

只是为了好奇价值......使用tacGNU coreutils 中的:给定一个变量ip,格式192.168.1.1为 then

$(printf %s "$ip." | tac -s.)in-addr.arpa

IE

$ ip=192.168.1.1
$ rr=$(printf %s "$ip." | tac -s.)in-addr.arpa
$ echo "$rr"
1.1.168.192.in-addr.arpa

答案2

你可以这样做AWK。有更好的方法可以做到这一点,但我认为这是最简单的。

echo '192.168.1.1' | awk 'BEGIN{FS="."}{print $4"."$3"."$2"."$1".in-addr.arpa"}'

这将颠倒 IP 地址的顺序。

只是为了节省一些击键,正如 Mikel 所建议的,我们可以进一步缩短上面的语句:

echo '192.168.1.1' | awk -F . '{print $4"."$3"."$2"."$1".in-addr.arpa"}'

或者

echo '192.168.1.1' | awk -F. '{print $4"."$3"."$2"."$1".in-addr.arpa"}'

或者

echo '192.168.1.1' | awk -F. -vOFS=. '{print $4,$3,$2,$1,"in-addr.arpa"}'

AWK 非常灵活。 :)

答案3

如果您只想使用 shell ( zsh, ksh93, bash),还有另一种方法:

IFS=. read w x y z <<<'192.168.1.1'
printf '%d.%d.%d.%d.in-addr.arpa.' "$z" "$y" "$x" "$w"

或者在普通的 shell 中:

echo '192.168.1.1' | { IFS=. read w x y z; echo "$z.$y.$w.$x.in-addr.arpa."; }

答案4

最后,Ruby:

ruby -r ipaddr -e 'puts IPAddr.new(ARGV.first).reverse' 192.168.1.1

它还支持 IPv6

2607:F8B0:4000:080A:0000:0000:0000:2000
=> 0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.a.0.8.0.0.0.0.4.0.b.8.f.7.0.6.2.ip6.arpa

相关内容