পিছন দিকে কীভাবে আইপি ঠিকানা পড়বেন?


19

আমাদের যদি এই স্ট্রিং থাকে ( আইপি ঠিকানা ):192.168.1.1

আমি কীভাবে এই স্ট্রিং থেকে ( ডিএনএস বিপরীত রেকর্ড ফর্ম ) পেতে পারি , তাই এটি 1.1.168.192.in-addr.arpaশেল স্ক্রিপ্ট ব্যবহার করার মতো দেখানো হবে ?


শেলের সাথে থাকতে হবে?
ব্রায়াম

1
এটি করা বন্ধ করুন
মাইকেল মরোজেক

1
উত্তরের এই পরিমাণের সাথে এটি কোডগল্ফে আরও ভাল হওয়া উচিত;)
tkausl

@ টকসল, আপনি চাইলে এটি ভাগ করুন :)
নেটওয়ার্কার

উত্তর:


29

আপনি এটি এডব্লিউকে দিয়ে করতে পারেন । এটি করার জন্য আরও সুন্দর উপায় রয়েছে তবে আমি মনে করি এটি সবচেয়ে সহজ।

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"}'

এডাব্লু কে বেশ নমনীয়। :)


আপনি যদি কয়েকটি কীস্ট্রোক সংরক্ষণ করতে চান -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

যা আইপিভি 6 সমর্থন করে

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

জিএনইউ এর মাধ্যমে 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

এটি কোনও আইপিভি 4-ঠিকানা ফর্ম্যাটকে বিপরীত করে।

উদাহরণ:

$ 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
এটিই দ্রুততম সমাধান! 45 কে আইপি রূপান্তরিত করেছে মাত্র 0.794 সেকেন্ডে।
পেট্রা জাভেরিক

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"(এক লাইনে সব)
Anthon

3

সাথে zsh:

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

সেগুলি পরিবর্তনশীল প্রসারণের পতাকা:

  • s:.:: এস প্লিট অন.
  • Oa: বিপরীত হে রডার a rray
  • j:.:: জে ওন অন.

3

আর একটি সম্ভাবনা হ'ল "-x" স্যুইচ সহ "ডিগ" কমান্ড লাইন সরঞ্জামটি ব্যবহার করা।

এটি পিটিআর এন্ট্রিতে আসলে একটি অনুরোধ করে, তবে আপনি যদি "পিটিআর" এ ফিল্টার করেন তবে এটি আপনাকে একটি মন্তব্য করা লাইন (অনুরোধ) এবং সম্ভবত কিছু উত্তর দেখিয়ে দেবে।

একটি ছোট স্ক্রিপ্ট না লিখে পিটিআর নামের দ্রুত লেখার জন্য "ডিগ" ব্যবহার করা সহজ হতে পারে। বিশেষত আপনার যদি ইন্টারঅ্যাকটিভভাবে এটির প্রয়োজন হয় (ফলাফলটি কাটাতে এবং পেস্ট করতে)। এটি আইপিভি 6-তেও কাজ করে।


2

আপনি যদি এটি আইপিভি 6 এর সাথেও কাজ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন 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("."))))অদ্ভুতভাবে , পাইথন 2.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.

এটি কেবলমাত্র আপনার ডিএনএসে অনুসন্ধান করতে পারে এমন ঠিকানাগুলির জন্য কাজ করে। আপনি যদি অজানা ঠিকানা ব্যবহার করে দেখে থাকেন তবে একটি ত্রুটি বার্তা পাবেন (এতে বিপরীত ঠিকানা অন্তর্ভুক্ত রয়েছে তবে কিছুটা আলাদা পোস্ট প্রসেসিং প্রয়োজন)।
আলেকজান্ডার রেমেছ

1

একটি Var ধরে নেওয়া যাক আইপি রয়েছে: ip=192.168.2.1। মানটি যদি কোনও নতুন ভেরিয়েবলকে দেওয়া দরকার হয়, তবে কেবল কোনও সমাধান ভিতরে loুকিয়ে দিন $()এবং এটি ভারে নির্ধারণ করুন 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

ডিগ এবং হোস্ট উভয় সমাধান আইপিভি 6 দিয়ে কাজ করে।


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

কম সরঞ্জাম সহ ম্যাটবিয়ানকো উত্তরের একটি সংক্ষিপ্ত বিকল্প , তবে পিসগ্রিগ ব্যবহার করা হতে পারে:

$ 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.

0

নিম্নলিখিত এক লাইনের শেল ব্যবহার করুন:

echo '192.168.1.1' | tr '.' '\n' | tac | paste -s -d '.' -
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.