Bash : 활성 IP 주소의 역방향 DNS 조회 | sort -n |

웹 서버 액세스 로그에서 가장 활동적인 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)

스크립트에 의존하지 않고 어떻게해야합니까 (즉, 한 줄 명령 만 사용)? 모든 조언을 부탁드립니다.



답변

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.


답변