IPアドレスを逆方向に読み取るには?

IPアドレスを逆方向に読み取るには?

この文字列がある場合(IPアドレス):192.168.1.1

どうやって入手できますか(DNS逆記録フォーム)をこの文字列から抽出すると、1.1.168.192.in-addr.arpaシェルスクリプトを使用しているように見えますか?

答え1

ただ好奇心の価値のために...GNU coreutilsを使用するtac:変数が与えられると、フォーマットはip192.168.1.1のようになります。

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

つまり

$ 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

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"

または通常のシェルから:

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

答え4

最後にルビー:

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

関連情報