Jika kami memiliki string ini ( alamat IP ):192.168.1.1
Bagaimana saya bisa mendapatkan ( bentuk catatan balik DNS ) dari string ini, sehingga akan ditampilkan seperti 1.1.168.192.in-addr.arpa
menggunakan skrip shell?
shell
text-processing
Networker
sumber
sumber
Jawaban:
Anda dapat melakukannya dengan AWK . Ada cara yang lebih baik untuk melakukannya, tetapi ini adalah yang paling sederhana, saya pikir.
Ini akan membalik urutan alamat IP.
Hanya untuk menghemat beberapa penekanan tombol, seperti yang disarankan Mikel, kita dapat lebih mempersingkat pernyataan atas:
ATAU
ATAU
AWK cukup fleksibel. :)
sumber
-F .
harus sama denganBEGIN{FS="."}
.Hanya untuk nilai rasa ingin tahu ... menggunakan
tac
dari coreutils GNU: diberikan variabelip
dalam bentuk192.168.1.1
kemudianyaitu
sumber
tac
!printf
edit yang elegan (saya awalnya memposting yang jelekecho -n
)printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Jika Anda ingin menggunakan hanya shell (
zsh
,ksh93
,bash
), inilah cara lain:Atau di shell tua polos:
sumber
Mudah dengan Perl, dengan demikian:
sumber
perl -F'\.' -lane '$,=".";print reverse @F'
Untuk menyelesaikannya, Ruby:
Yang juga mendukung IPv6
sumber
ruby -r ipaddr -e 'puts ...'
Melalui GNU
sed
,Itu membalikkan format alamat IPv4 apa pun.
Contoh:
sumber
Menggunakan perpustakaan standar Python :
sumber
python3.5 -c "import ipaddress; ipaddress.ip_address('192.168.1.1').reverse_pointer"
(semua dalam satu baris)Dengan
zsh
:Itu adalah bendera ekspansi variabel:
s:.:
: s siap.
Oa
: Sebaliknya o rder yang satu RRayj:.:
: j onin.
sumber
Kemungkinan lain adalah menggunakan alat baris perintah "gali" dengan sakelar "-x".
Ini sebenarnya melakukan permintaan pada entri PTR, tetapi jika Anda memfilter pada "PTR" itu akan menampilkan satu baris komentar (permintaan) dan mungkin beberapa balasan.
Menggunakan "menggali" bisa berguna untuk penulisan cepat nama PTR, tanpa harus menulis skrip kecil. Terutama jika Anda membutuhkannya secara interaktif (untuk memotong dan menempelkan hasilnya). Ini bekerja pada IPv6 juga.
sumber
Jika Anda ingin bekerja dengan IPv6 juga, Anda dapat menggunakannya
dig -x
.Sebagai contoh:
sumber
Dengan Python
sumber
"{}.in-addr.arpa".format(".".join(reversed(a.split("."))))
dalam Python2.7sumber
Dengan cara ini Anda bisa mengetikkan alamat dan menekan return untuk hasil Anda.
sumber
Dengan
host
perintah daridnsutils
:sumber
Dengan asumsi var berisi ip:
ip=192.168.2.1
. Jika nilai perlu diberikan ke variabel baru, cukup lampirkan semua solusi di dalamnya$()
dan tetapkan itu ke varrr=$(...)
.Beberapa solusi mungkin:
Sederhana
: printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Kebanyakan kerang
: IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
Beberapa kerang
: 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"}'
sed
: echo "$ip" | sed -E 's/([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$/\4.\3.\2.\1.in-addr.arpa./'
sed
: echo "arpa.in-addr.$ip" | sed 'y/./\n/' | sed 'G;$s/\n/./gp;h;d'
perl
: echo "$ip" | perl -F\\. -lane '$,=".";print( join(".",(reverse @F),"in-addr.arpa"))'
penggalian
: dig -x "$ip" | awk -F '[; \t]+' '/^;.*PTR$/{print($2)}'
tuan rumah
: host -t ptr 192.168.2.1 | cut -d' ' -f2
Kedua solusi menggali dan host bekerja dengan IPv6.
sumber
sumber
Alternatif yang lebih pendek untuk jawaban mattbianco dengan lebih sedikit alat, tetapi menggunakan pcregrep bisa:
sumber
Gunakan satu baris shell berikut:
sumber