捕获 DNS 请求并记录恶意域名访问–实时记录
直接上脚本
#!/bin/bash# 检查 tcpdump 和 tshark 是否已安装
if ! command -v tcpdump > /dev/null; thenecho "Error: tcpdump not found. Please install tcpdump."exit 1
fiif ! command -v tshark > /dev/null; thenecho "Error: tshark not found. Please install tshark (Wireshark)."exit 1
fi# 设置恶意域名列表文件和恶意 IP 记录文件
malicious_domains_file="malicious_domains.txt"
malicious_ips_file="malicious_ips.txt"# 捕获持续时间(单位:秒)
capture_duration=60# 使用 tcpdump 抓取 DNS 请求,并将结果直接传递给 tshark 进行分析
echo "Capturing and analyzing DNS requests..."
rm -f "$malicious_ips_file"
sudo tcpdump -i any -s 0 -U -w - 'udp port 53' 2>/dev/null | tshark -i - -l -Y "dns.flags.response == 0" -T fields -e ip.src -e dns.qry.name -e frame.time_epoch | while read -r line; doip=$(echo "$line" | awk '{print $1}')domain=$(echo "$line" | awk '{print $2}')timestamp=$(echo "$line" | awk '{print $3}')formatted_timestamp=$(date -d @$timestamp +"%Y-%m-%d %H:%M:%S")if grep -q -F "$domain" "$malicious_domains_file"; thenecho "Malicious domain request: $domain from IP: $ip at $formatted_timestamp" | tee -a "$malicious_ips_file"fi
done &
tcpdump_pid=$!# 等待捕获完成
echo "Capturing for $capture_duration seconds..."
sleep $capture_duration# 停止 tcpdump
echo "Stopping capture..."
sudo kill $tcpdump_pidecho "Done."
在这个修订后的脚本中,将 tcpdump 命令的 -U 选项添加回来,以确保数据包在被捕获后立即被写入管道。同时,我们将 tshark 命令的 -l 选项添加回来,以确保数据包在被分析后立即被输出。这样,我们就可以实时分析捕获的流量,并将恶意 IP 记录实时写入文件。同时,我们也能在脚本被中断时将已获取的数据写入文件。