बैश: एक्टिव आईपी एड्रेस का डीएनएस लुकअप उल्टा


11

मेरे पास एक-पंक्ति कमांड है जो वेब सर्वर एक्सेस लॉग से शीर्ष 10 सबसे सक्रिय आईपी पते को सूचीबद्ध करता है:

cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10

एक नमूना परिणाम सेट (केवल सादगी के लिए 3 प्रविष्टियों के साथ) होगा:

20 12.34.56.7
22 3.67.89.201
29 9.0.203.255

जैसा कि आप देख सकते हैं, गिनती आईपी पते से पहले होती है, दोनों एक रिक्त स्थान द्वारा अलग हो जाते हैं। वहाँ वास्तव में रिक्त स्थान गिनती से पहले भी हैं, लेकिन मैं उन्हें यहाँ दिखाने के लिए नहीं मिल सकता।

मैं आईपी पतों की एक रिवर्स डीएनएस लुकअप करना पसंद करता हूं ताकि यह इस तरह दिखाई दे:

20 12.34.56.7 (d12-34-56-7.abhsia.telus.net)
22 3.67.89.201 (customer.vpls.net)
29 9.0.203.255 (9-0-203-255.hlrn.qwest.net)

मैं एक स्क्रिप्ट का सहारा लिए बिना (यानी एक-लाइन कमांड से चिपके हुए) कैसे कर सकता हूं? किसी भी सलाह की बहुत प्रशंसा की जाएगी।

जवाबों:


16

आप dig +noall +answer -x <IP>एक आईपी पता देखने के लिए उपयोग कर सकते हैं ।

आईपी ​​पते की सूची वाली फ़ाइल पर बस लूप करने के लिए:

while read ip; do dig +noall +answer -x $ip; done < ips.txt

या, अपनी गिनती कमांड के आउटपुट को पाइप करें। इस बार हमें अलग-अलग संख्या और IP पते मिलते हैं और फिर उन्हें एक पंक्ति में प्रिंट किया जाता है:

cat access.log | awk '{print $1}' | sort | 
uniq -c | sort -n | tail -n10 |
while read count ip; do printf "%d " $count; printf "%s " $ip; dig +noall +answer -x $ip; done

उदाहरण (UUOC के लिए खेद है):

cat test | while read count ip; do printf "%d " $count; printf "%s " $ip; dig +noall +answer -x $ip; done
20 8.8.8.8 8.8.8.8.in-addr.arpa.    52767   IN  PTR google-public-dns-a.google.com.
22 8.8.4.4 4.4.8.8.in-addr.arpa.    61369   IN  PTR google-public-dns-b.google.com.

आप digकेवल होस्ट नाम प्राप्त करने के लिए awk में पाइप के आउटपुट को आगे बढ़ा सकते हैं :

cat test | while read count ip; do printf "%d " $count; printf "%s " $ip; echo $(dig +noall +answer -x $ip | awk '{ print $(NF) }'); done
20 8.8.8.8 google-public-dns-a.google.com.
22 8.8.4.4 google-public-dns-b.google.com.

त्वरित उत्तर के लिए धन्यवाद! हालांकि, इस बार मुझे खुदाई से केवल आउटपुट मिला है और मैंने गिनती खो दी है। वांछित आउटपुट होगा: <count> <IP पता> <रिवर्स DNS लुकअप>
GooDoo

whileव्हॉट्सएप पर आधारित इनपुट को विभाजित करने के बाद से बदलना काफी आसान है , इसलिए आप अलग से काउंट और आईपी एड्रेस पढ़ सकते हैं। मेरा अपडेट देखें आप digआउटपुट बदलने के लिए विकल्पों के साथ खेल सकते हैं- मैंने इसका वास्तव में उपयोग नहीं किया है।
13:30

धन्यवाद! मैंने कुछ संशोधन किए हैं और अब यह वही है cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | sed "s/^[ \t]*//" | tail -n10 | while read count ip ; do echo "$count " "$ip" "( $(dig +noall +answer -x $ip | awk '{ print $(NF) }') )"; doneजिसकी मुझे तलाश है: अपनी तरह की मदद की सराहना करें!
गूडो

for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt

+1 लेकिन btw, xargs का उपयोग करते हुए ("xargs - मानक इनपुट से कमांड लाइनों का निर्माण और निष्पादित करें") एक विकल्प होगा जबकि छोरोंcat file | xargs -n1 dig +noall +answer -x
sfussenegger
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.