DNS A 레코드 요청을 수집하는 방법은 무엇입니까?


15

나가는 모든 A기록을 RedHat PC에 기록해야합니다 . 나는 다음을 사용하려고 시도했다 tcpdump.

tcpdumpdns=OUTPUT-FILENAME-HERE
nohup tcpdump -K dst port 53 -w $tcpdumpdns > /dev/null 2>&1 &

다음과 같은 출력 파일을 만듭니다.

19:26:12.185392 IP 172.16.0.6.57977 > google-public-dns-a.google.com.domain: 51198+ A? yahoo.com. (27)

그래서 나는 그것을 얻기 위해 그것을 처리해야합니다 yahoo.com:

echo $tcpdumpdns | awk '/ A\? / {u = NF - 1; print $u}' | sed 's/^www.//g; s/.$//g' | sort -u

모든 발신 A레코드 요청 을 수집하는 더 나은 솔루션이 있습니까?

추신 : DNS A 레코드 수집은 HTTPS를 통해 연결할 수있는 최신 웹 사이트 목록이 있어야합니다. 따라서 HTTPSEverywhere Firefox Add-on에 대한 xml 파일을 생성 할 수 있습니다. 이것은 스크립트의 일부일뿐입니다.


제공 한 솔루션에 어떤 문제가 있습니까?
Michael Mrozek

GUI 환경이 있다면 wireshark-gtk를 사용하는 것이 더 쉬운 해결책입니다. 왜냐하면 훨씬 쉽게 필터링 할 수 있기 때문입니다.
Hanan N.

@Hanan N .: GUI는 옵션이 아닙니다. 이것은 자동이어야합니다.
LanceBaynes

@ 마이클 Mrozek : 나는 아무것도 희망하지 않습니다. 그러나 대안 솔루션을 사용할 수 있기 때문에 물었습니다.
LanceBaynes

답변:


12

Wireshark를 사용하십시오.

tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"

2
나는 얻는다tshark: "A" cannot be found among the possible values for dns.qry.type.
Jack O'Connor

3
@ JackO'Connor 문제를 해결하기 위해 유형 A DNS 레코드의 10 진수 값은 1입니다. 따라서 작동해야합니다.tshark -f "udp port 53" -Y "dns.qry.type == 1 and dns.flags.response == 0"
Rolinh

13

wireshark가 설치되어 있지 않으면

tcpdumpdns=/tmp/tcpdumps
tcpdump -lvi any "udp port 53" | tee $tcpdumpdns

당신을 위해 일해야합니다. 출력을 두 번째 값에서 마지막 값으로 제한하려면 로그 파일을 다음과 같이 구문 분석합니다.

grep -E 'A\?' $tcpdumpdns |sed -e 's/^.*A? //' -e 's/ .*//'|sort -u

당신이 그것을 원한다면 :

tcpdump -lvi any "udp port 53" 2>/dev/null|grep -E 'A\?'|awk '{print $(NF-1)}'

그것을해야합니다 (여기서 sed와 awk는 상호 교환 가능하며 awk를 선택합니다).


grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -u입력이 적습니다
Alexx Roche
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.