IP एड्रेस को पीछे की तरफ कैसे पढ़ें?


19

यदि हमारे पास यह स्ट्रिंग ( IP पता ) है:192.168.1.1

मैं इस स्ट्रिंग से DNS ( DNS रिवर्स रिकॉर्ड फॉर्म ) कैसे प्राप्त कर सकता हूं , इसलिए इसे 1.1.168.192.in-addr.arpaशेल स्क्रिप्ट का उपयोग करके दिखाया जाएगा ?


यह खोल के साथ होना है?
ब्रिअम

1
ऐसा करना बंद करो
माइकल Mrozek

1
उत्तरों की इस राशि के साथ यह कोडगॉल्फ में बेहतर होना चाहिए;)
tkausl

@tkausl, इसे वहां शेयर करें यदि आप :)
Networker

जवाबों:


29

आप इसे AWK के साथ कर सकते हैं । ऐसा करने के लिए अच्छे तरीके हैं, लेकिन मुझे लगता है कि यह सबसे सरल है।

echo '192.168.1.1' | awk 'BEGIN{FS="."}{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. '{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 बहुत लचीला है। :)


यदि आप कुछ कीस्ट्रोक्स को बचाना चाहते हैं, तो -F .इसके बराबर होना चाहिए BEGIN{FS="."}
मिकेल

33

बस जिज्ञासा मूल्य के लिए ...tac जीएनयू कोर्यूटिल्स का उपयोग करके : तब 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

9
+1 यह निश्चित रूप से मेरा पसंदीदा उत्तर है। मुझे शुरू करने के लिए धन्यवाद tac!
जोनाथन रेनहार्ट

सुरुचिपूर्ण printfसंपादन के लिए @ echo -n
स्टीफनचेज़ेलस के

1
स्पष्ट रूप से सरल:printf 'arpa.in-addr.%s.' "$ip" | tac -s.
इसहाक

17

आप केवल उपयोग करने के लिए खोल (चाहते हैं 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."; }

12

आसानी से पर्ल के साथ, इस प्रकार:

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

6
और भी अधिक कॉम्पैक्ट बनाया जा सकता है:perl -F'\.' -lane '$,=".";print reverse @F'
जोसेफ आर।

6

इसे बाहर करने के लिए, रूबी:

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

आप स्क्रिप्ट से "आवश्यकता" ले सकते हैं:ruby -r ipaddr -e 'puts ...'
ग्लेन जैकमैन

5

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

1
यह सबसे तेज उपाय है! 45k IP सिर्फ 0.794s में परिवर्तित हुई।
पेट्र जवोरिक

4

पायथन के मानक पुस्तकालय का उपयोग करना :

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

1
यह 3.5 मानक पुस्तकालय में है और सितंबर 2015 में रिलीज होने वाली है। एक स्क्रिप्ट से आप यह कर सकते हैं: python3.5 -c "import ipaddress; ipaddress.ip_address('192.168.1.1').reverse_pointer"(सभी एक पंक्ति में)
एंथन

3

के साथ zsh:

$ ip=192.168.1.1
$ echo ${(j:.:)${(s:.:Oa)ip}}.in-addr.arpa
1.1.168.192.in-addr.arpa

वे चर विस्तार झंडे हैं:

  • s:.:: रों पर plit.
  • Oa: रिवर्स rder a rray
  • j:.:: जे ओइन.

3

एक और संभावना "-x" स्विच के साथ "खुदाई" कमांड लाइन टूल का उपयोग करना है।

यह वास्तव में पीटीआर प्रविष्टि पर एक अनुरोध करता है, लेकिन यदि आप "पीटीआर" पर फ़िल्टर करते हैं, तो यह आपको एक टिप्पणी लाइन (अनुरोध) और शायद कुछ उत्तर दिखाएगा।

एक छोटी स्क्रिप्ट लिखने के बिना, "खुदाई" का उपयोग पीटीआर नाम के त्वरित लेखन के लिए आसान हो सकता है। विशेष रूप से यदि आपको इसे अंतःक्रियात्मक रूप से (परिणाम को काटने और पेस्ट करने की आवश्यकता है)। यह IPv6 पर भी काम करता है।


2

यदि आप चाहते हैं कि यह IPv6 के साथ भी काम करे , तो आप उपयोग कर सकते हैं dig -x

उदाहरण के लिए:

$ dig -x 194.68.208.240 | egrep '^;.*PTR$' | cut -c 2- | awk '{print $1}'
240.208.68.194.in-addr.arpa.

$ dig -x 2001:db8:dc61:2a61::1 | egrep '^;.*PTR$' | cut -c 2- | awk '{print $1}'
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.6.a.2.1.6.c.d.8.b.d.0.1.0.0.2.ip6.arpa.

2

पायथन में

 a = "192.168.1.122"
 import re
 m = re.search(r'(\d+)\.(\d+)\.(\d+)\.(\d+)',a)
 ip = m.group(4),m.group(3),m.group(2),m.group(1)
 '.'.join(ip) + ".in-addr.arpa"
 '122.1.168.192.in-addr.arpa'

2
या अधिक मुहावरेदार, "{}.in-addr.arpa".format(".".join(reversed(a.split("."))))Python2.7 में
इरुवर

2
IFS=. ; set -- ${0+192.168.1.2}
printf %b. $4 $3 $2 $1 in-addr.arpa\\c

IFS=. ; printf %s\\n \
    in-addr.arpa ${0+192.168.1.2} |    
sed '1!G;$s/\n/./gp;h;d'

IFS=. ; printf '[%b.] ' \
    ${0+192.168.1.2.]PPPPP\\c} |dc
echo in-addr.arpa

1
$ while read ip
while> do
while> n=( $(echo $ip) ) && echo "${n[4]}"'.'"${n[3]}"'.'"${n[2]}"'.'"${n[1]}"'.'"in-addr.arpa"
while> done
192.168.1.2
2.1.168.192.in-addr.arpa

इस तरह से आप अपने परिणाम के लिए एक पता और हिट रिटर्न टाइप कर सकते हैं।


1

hostसे कमांड के साथ dnsutils:

$ host -t ptr 192.168.1.1 | cut -d' ' -f 2
1.1.168.192.in-addr.arpa.

यह केवल उन पतों के लिए काम करता है जिन्हें आप अपने DNS में देख सकते हैं। यदि आप एक अज्ञात पते की कोशिश करते हैं, तो आपको एक त्रुटि संदेश मिलेगा (जिसमें हालांकि रिवर्स पता शामिल है लेकिन थोड़ा अलग पोस्टप्रोसेसिंग की आवश्यकता है)।
अलेक्जेंडर रेमेस्च

1

मान लें कि किसी संस्करण में IP है ip=192.168.2.1:। यदि मान को एक नए चर को देने की आवश्यकता है, तो बस किसी भी समाधान को अंदर संलग्न करें $()और उस संस्करण को असाइन करें rr=$(...)

कुछ समाधान संभव हैं:

सरल : printf 'arpa.in-addr.%s.' "$ip" | tac -s.
अधिकांश गोले : IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
कुछ गोले : IFS=. read d c b a <<<"$ip"; printf %s "$a.$b.$c.$d.in-addr.arpa."
: echo "$ip" | awk -F. '{OFS=FS;print $4,$3,$2,$1,"in-addr.arpa"}'
: echo "$ip" | sed -E 's/([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$/\4.\3.\2.\1.in-addr.arpa./'
: echo "arpa.in-addr.$ip" | sed 'y/./\n/' | sed 'G;$s/\n/./gp;h;d'
: echo "$ip" | perl -F\\. -lane '$,=".";print( join(".",(reverse @F),"in-addr.arpa"))'
: dig -x "$ip" | awk -F '[; \t]+' '/^;.*PTR$/{print($2)}'
: host -t ptr 192.168.2.1 | cut -d' ' -f2

दोनों खुदाई और मेजबान समाधान IPv6 के साथ काम करते हैं।


1
#!/bin/bash
# script file name reverseip.sh
if [ -z $1 ] || [ "help" == $1 ]
then
echo 'Convert a full ipv4 or ipv6 address to arpa notation'
echo "usage:"
echo ./reverseip.sh "help"
echo ./reverseip.sh "ipv4 address format: xxxx.xxxx.xxxx.xxxx"
echo ./reverseip.sh "ipv6 address format: xxxx:xxxx:xxxx:xxxx::xxxx"
echo "examples:"
echo ./reverseip.sh 216.58.207.35
echo ./reverseip.sh 2a00:1450:4001:824::2003
exit
fi

# if ip address passed containing ':'
if [[ $1 = *':'* ]];
then
# invert ipv6 address e.g.: 2a00:1450:4001:824::2003 to 3.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.4.2.8.0.1.0.0.4.0.5.4.1.0.0.a.2.
# @see lsowen https://gist.github.com/lsowen/4447d916fd19cbb7fce4
echo "$1" | awk -F: 'BEGIN {OFS=""; }{addCount = 9 - NF; for(i=1; i<=NF;i++){if(length($i) == 0){ for(j=1;j<=addCount;j++){$i = ($i "0000");} } else { $i = substr(("0000" $i), length($i)+5-4);}}; print}' | rev | sed -e "s/./&./g" | echo "$(</dev/stdin)ip6.arpa."
else
# invert ipv6 address e.g.: 216.58.207.35 to 35.207.58.216.in-addr.arpa
# @see Stéphane Chazelas /unix/132779/how-to-read-an-ip-address-backwards
echo $(printf %s "$1." | tac -s.)in-addr.arpa
fi

0

मैटिबिनको के उत्तर के लिए एक छोटा विकल्पकम उपकरणों के साथ , लेकिन pcregrep का उपयोग करना हो सकता है:

$ dig -x 194.68.208.240 | pcregrep -o1 '^;(\S+)\s+IN\s+PTR$'
240.208.68.194.in-addr.arpa.

$ dig -x 2001:db8:dc61:2a61::1 | pcregrep -o1 '^;(\S+)\s+IN\s+PTR$'
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.6.a.2.1.6.c.d.8.b.d.0.1.0.0.2.ip6.arpa.

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.