Làm cách nào để thu thập các yêu cầu bản ghi DNS A?


15

Tôi cần ghi lại tất cả các Abản ghi đi trên PC RedHat. Tôi đã thử sử dụng tcpdump:

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

Nó tạo một tệp đầu ra như:

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

Vì vậy, tôi cần xử lý để có được yahoo.com:

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

Có giải pháp nào tốt hơn để thu thập tất cả các Ayêu cầu hồ sơ gửi đi không?

ps: thu thập DNS Một bản ghi chỉ cần thiết để có một danh sách cập nhật các trang web có thể truy cập thông qua HTTPS. Vì vậy, tôi có thể tạo các tệp xml cho HTTPSEverywhere Firefox Add-on. Vì vậy, đây chỉ là một phần của một kịch bản.


Có gì sai với giải pháp bạn cung cấp?
Michael Mrozek

Bạn có GUI env không, nếu vậy sử dụng wireshark-gtk là một giải pháp dễ dàng hơn, vì bạn có thể lọc ở đó dễ dàng hơn nhiều.
Hanan N.

@Hanan N.: GUI không phải là một lựa chọn. điều này là cần thiết để được tự động.
LanceBaynes

@Michael Mrozek: Tôi hy vọng không có gì. Nhưng tôi đã hỏi vì tôi đang mở cho các giải pháp thay thế.
LanceBaynes

Câu trả lời:


12

Sử dụng Wireshark:

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

2
Tôi nhận đượctshark: "A" cannot be found among the possible values for dns.qry.type.
Jack O'Connor

3
Để giải quyết vấn đề @ JackO'Connor, giá trị thập phân cho bản ghi DNS loại A là 1. Do đó, điều này sẽ hoạt động:tshark -f "udp port 53" -Y "dns.qry.type == 1 and dns.flags.response == 0"
Rolinh

13

Nếu bạn chưa cài đặt wireshark thì

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

nên làm việc cho bạn Vì bạn muốn giới hạn đầu ra ở giá trị thứ hai đến giá trị cuối cùng nên tôi sẽ phân tích tệp nhật ký của bạn bằng:

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

Nếu bạn muốn nó sống thì:

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

nên làm điều đó, (ở đây sed và awk có thể hoán đổi cho nhau; và tôi sẽ chọn awk.)


grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -uít loại hơn
Alexx Roche
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.