dnsmasq에서 제공하는 DNS 로그를 기반으로 임시 호스트 파일을 생성하려고합니다. 대부분 작동하지만 CNAME에 문제가 있습니다. 나는 지금까지 내가 성취 한 것을 보여줄 것이다.awk를 사용하여 줄 단위로 검색하고 그 결과를 다음 줄에 추가하십시오.
내가 얻을 필요가있는 로그에는 3 가지 유형의 응답이 있습니다. 간단한이 출력 될 수있다 "64.34.119.12 stackoverflow.com"
grep reply /tmp/dnslog | grep -v 'NXDOMAIN\|NODATA' | awk '{print $8 " " $6}'
로그의 다른 종류의 CNAME이 우려를 사용하는 예를 들어
Jun 20 14:27:59 dnsmasq[2551]: reply stackoverflow.com is 64.34.119.12
로그에서 추출하는 것은 매우 쉽습니다, 여기 하나의 예; 그러나이 방법은 거기에 로그 다음 유형에 대해 작동하지 않는다
grep reply /tmp/dnslog | grep -v 'NXDOMAIN\|NODATA' | awk '{print $8 "\t" $6}' | awk '/CNAME/ {name=$2; getline ; print $0 " " 'name'}'
를 사용
Jun 20 14:42:11 dnsmasq[2551]: reply www.videolan.org is <CNAME>
Jun 20 14:42:11 dnsmasq[2551]: reply ganesh.videolan.org is 88.191.250.2
이 출력 될 수있는 "88.191.250.2 ganesh.videolan.org www.videolan.org" 다수의 CNAME이는
Jun 20 15:00:42 dnsmasq[2551]: reply en.wikipedia.org is <CNAME>
Jun 20 15:00:42 dnsmasq[2551]: reply wikipedia-lb.wikimedia.org is <CNAME>
Jun 20 15:00:42 dnsmasq[2551]: reply wikipedia-lb.esams.wikimedia.org is 91.198.174.225
이전 명령은 다음과 같은 결과
,132에게 부여합니다 있습니다 10두 번째와 함께 언급 된 첫 번째 명령을 사용하면 wikipedia-lb.esams.wikimedia.org는 91.198.174.225와 연결되지만 wikipedia-lb.wikimedia.org는 wikipedia-lb.esams.wikimedia와 연결되지 않습니다. .org. 이상적인 결과는이
91.198.174.225 wikipedia-lb.esams.wikimedia.org wikipedia-lb.wikimedia.org en.wikipedia.org
이 문제를 해결하려면 다음, 내가 파일 거꾸로 읽을 필요가 생각해야하지만 다음 라인에 추가 할, AWK의의 getline 부분이 엉망을하고있는 것인가?
이상적으로 두 스크립트를 따로 실행하지 않고 모든 결과를 출력하는 명령에 두 가지 유형의 로그를 결합하고 싶습니다. 누구든지 awk 명령을 수선하는데 도움을 줄 수 있습니까?
다음은 "grep reply/var/dnslog"샘플이며 원하는 호스트 파일이 출력됩니다. 현재 이차적 인 다른 문제가 있습니다. 이는 원하는 호스트 출력에서 강조 표시됩니다.
Jun 20 15:28:21 dnsmasq[2551]: reply photos-a.ak.fbcdn.net is <CNAME>
Jun 20 15:28:21 dnsmasq[2551]: reply photos-a.ak.facebook.com.edgesuite.net is <CNAME>
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.25
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.48
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.64
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.9
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.26
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.51
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.8
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.50
Jun 20 15:28:21 dnsmasq[2551]: reply a995.dspmm1.akamai.net is 213.200.108.65
Jun 20 15:28:22 dnsmasq[2551]: reply stackoverflow.com is 64.34.119.12
Jun 20 15:29:41 dnsmasq[2551]: reply www.wikipedia.org is <CNAME>
Jun 20 15:29:41 dnsmasq[2551]: reply wikipedia-lb.wikimedia.org is <CNAME>
Jun 20 15:29:41 dnsmasq[2551]: reply wikipedia-lb.esams.wikimedia.org is 91.198.174.225
Jun 20 15:29:42 dnsmasq[2551]: reply en.wikipedia.org is <CNAME>
Jun 20 15:29:42 dnsmasq[2551]: reply wikipedia-lb.wikimedia.org is <CNAME>
Jun 20 15:29:42 dnsmasq[2551]: reply wikipedia-lb.esams.wikimedia.org is 91.198.174.225
Jun 20 15:29:42 dnsmasq[2551]: reply ja.wikipedia.org is <CNAME>
Jun 20 15:29:42 dnsmasq[2551]: reply wikipedia-lb.wikimedia.org is <CNAME>
Jun 20 15:29:42 dnsmasq[2551]: reply wikipedia-lb.esams.wikimedia.org is 91.198.174.225
호스트는
213.200.108.26 a995.dspmm1.akamai.net photos-a.ak.facebook.com.edgesuite.net photos-a.ak.fbcdn.net
##ideally select 1 host at random from multiple of a995.dspmm1.akamai.net, although list may be randomised already so 1st will suffice##
64.34.119.12 stackoverflow.com
91.198.174.225 wikipedia-lb.esams.wikimedia.org wikipedia-lb.wikimedia.org www.wikipedia.org
91.198.174.225 wikipedia-lb.esams.wikimedia.org wikipedia-lb.wikimedia.org en.wikipedia.org
91.198.174.225 wikipedia-lb.esams.wikimedia.org wikipedia-lb.wikimedia.org ja.wikipedia.org
##Ideally, detect these similarities for wikipedia and convert the 3 lines into this;##
91.198.174.225 wikipedia-lb.esams.wikimedia.org wikipedia-lb.wikimedia.org www.wikipedia.org en.wikipedia.org ja.wikipedia.org
의도가 파일이 가능한 작게해야하므로 파일이, 낮은 대역폭, 높은 대기 시간 링크를 배포 할 것입니다 파일. 장기간에 걸쳐이 파일을 사용하면 많은 문제가 발생할 것이라는 점을 알고 있습니다. 단시간 동안 만 파일을 유효하게 구성했습니다. 지적 된 문제에 도움을 줄 수있는 사람이라면 크게 환영 할 것입니다. 또한 제한된 범위의 UNIX 응용 프로그램을 사용할 수 있습니다. awk에서 위와 같은 결과를 얻을 수 있다면 좋을 것입니다. 미리 감사드립니다.
대단히 감사합니다. 내가 사용하고있는 장치에는 sort 명령이 없지만이를 해결하기 위해 "| awk '! x [$ 2] ++'"를 사용했습니다. 효율면에서이게 괜찮습니까? 샘플에 제공된 위키피디아 예제와 같이 대부분 중복 된 행을 병합하는 것이 가능합니까? 감사 – Matthew