[unix] IP 주소를 거꾸로 읽는 방법?

이 문자열 ( IP address )이있는 경우 :192.168.1.1

이 문자열에서 ( DNS reverse record form )을 어떻게 파생시킬 수 1.1.168.192.in-addr.arpa있습니까? 그래서 쉘 스크립트를 사용하는 것처럼 보 일까요?



답변

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는 매우 유연합니다. 🙂


답변

그냥 호기심 값 … 사용하는 tacGNU의로 coreutils에서 : 변수 주어진 ip형태로 192.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


답변

당신이 (쉘에만 사용하려는 경우 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."; }


답변

따라서 Perl을 사용하면 쉽게 :

$ echo 192.168.1.1|perl -nle 'print join ".",reverse(split /\./,$_)'
1.1.168.192


답변

반올림하기 위해 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


답변

GNU를 통해 sed,

sed -r 's/^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$/\4.\3.\2.\1.in-addr.arpa/g' file

IPv4 주소 형식을 반대로 바꿉니다.

예:

$ echo '192.168.1.1' | sed -r 's/^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$/\4.\3.\2.\1.in-addr.arpa/g'
1.1.168.192.in-addr.arpa

$ echo '192.1.1.1' | sed -r 's/^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$/\4.\3.\2.\1.in-addr.arpa/g'
1.1.1.192.in-addr.arpa

$ echo '1.1.1.1' | sed -r 's/^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$/\4.\3.\2.\1.in-addr.arpa/g'
1.1.1.1.in-addr.arpa

$ sed -r 's/^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$/\4.\3.\2.\1.in-addr.arpa/g' <<< '192.168.189.23'
23.189.168.192.in-addr.arpa


답변

파이썬의 표준 라이브러리 사용 :

>>> ipaddress.ip_address('192.168.1.1').reverse_pointer
'1.1.168.192.in-addr.arpa'