Bash : 활성 IP 주소의 역방향 DNS 조회


11

웹 서버 액세스 로그에서 가장 활동적인 10 개의 IP 주소를 나열하는 한 줄 명령이 있습니다.

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

보시다시피, 카운트는 IP 주소보다 우선하며, 둘은 공백으로 구분됩니다. 실제로 카운트 앞에 공백이 있지만 여기에 표시 할 수는 없습니다.

다음과 같이 IP 주소의 역방향 DNS 조회를 수행하고 싶습니다.

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>IP 주소를 조회하는 데 사용할 수 있습니다 .

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 address> <reverse DNS lookup>
GooDoo

while공백을 기준으로 입력을 분할하므로 카운트와 IP 주소를 개별적으로 읽을 수 있기 때문에 변경하기가 쉽습니다 . 내 업데이트를 참조하십시오. dig의 옵션을 사용하여 출력을 변경할 수 있습니다 . 실제로는 사용하지 않았습니다.
slhck

감사! 나는 약간의 수정을했고 지금은 내가 찾고있는 것이다 : 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당신의 친절한 도움에 감사하십시오!
GooDoo

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

xargs ( " cat file | xargs -n1 dig +noall +answer -x
xargs-
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.