यदि हमारे पास यह स्ट्रिंग ( IP पता ) है:192.168.1.1
मैं इस स्ट्रिंग से DNS ( DNS रिवर्स रिकॉर्ड फॉर्म ) कैसे प्राप्त कर सकता हूं , इसलिए इसे 1.1.168.192.in-addr.arpa
शेल स्क्रिप्ट का उपयोग करके दिखाया जाएगा ?
यदि हमारे पास यह स्ट्रिंग ( IP पता ) है:192.168.1.1
मैं इस स्ट्रिंग से DNS ( DNS रिवर्स रिकॉर्ड फॉर्म ) कैसे प्राप्त कर सकता हूं , इसलिए इसे 1.1.168.192.in-addr.arpa
शेल स्क्रिप्ट का उपयोग करके दिखाया जाएगा ?
जवाबों:
आप इसे 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="."}
।
बस जिज्ञासा मूल्य के लिए ...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
tac
!
printf
संपादन के लिए @ echo -n
printf 'arpa.in-addr.%s.' "$ip" | tac -s.
आसानी से पर्ल के साथ, इस प्रकार:
$ echo 192.168.1.1|perl -nle 'print join ".",reverse(split /\./,$_)'
1.1.168.192
perl -F'\.' -lane '$,=".";print reverse @F'
इसे बाहर करने के लिए, रूबी:
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 ...'
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'
python3.5 -c "import ipaddress; ipaddress.ip_address('192.168.1.1').reverse_pointer"
(सभी एक पंक्ति में)
के साथ 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 rrayj:.:
: जे ओइन.
एक और संभावना "-x" स्विच के साथ "खुदाई" कमांड लाइन टूल का उपयोग करना है।
यह वास्तव में पीटीआर प्रविष्टि पर एक अनुरोध करता है, लेकिन यदि आप "पीटीआर" पर फ़िल्टर करते हैं, तो यह आपको एक टिप्पणी लाइन (अनुरोध) और शायद कुछ उत्तर दिखाएगा।
एक छोटी स्क्रिप्ट लिखने के बिना, "खुदाई" का उपयोग पीटीआर नाम के त्वरित लेखन के लिए आसान हो सकता है। विशेष रूप से यदि आपको इसे अंतःक्रियात्मक रूप से (परिणाम को काटने और पेस्ट करने की आवश्यकता है)। यह IPv6 पर भी काम करता है।
यदि आप चाहते हैं कि यह 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.
पायथन में
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'
"{}.in-addr.arpa".format(".".join(reversed(a.split("."))))
Python2.7 में
$ 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
इस तरह से आप अपने परिणाम के लिए एक पता और हिट रिटर्न टाइप कर सकते हैं।
host
से कमांड के साथ dnsutils
:
$ host -t ptr 192.168.1.1 | cut -d' ' -f 2
1.1.168.192.in-addr.arpa.
मान लें कि किसी संस्करण में 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."
awk : 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 के साथ काम करते हैं।
#!/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
मैटिबिनको के उत्तर के लिए एक छोटा विकल्पकम उपकरणों के साथ , लेकिन 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.
निम्नलिखित में से एक पंक्ति का उपयोग करें:
echo '192.168.1.1' | tr '.' '\n' | tac | paste -s -d '.' -