You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本监控/etc/hosts域名黑名单的拦截访问记录?

实现方案

前提说明

你配置的hosts拦截本质是将黑名单域名解析指向0.0.0.0/127.0.0.1,需求完全可以实现,通过实时监控本地DNS查询请求、匹配hosts内的黑名单列表即可达到你要的输出效果。

可用脚本实现

把以下内容保存为hosts_block_monitor.sh:

#!/bin/bash
# 提取/etc/hosts里指向0.0.0.0的拦截域名列表
block_list=($(awk '/^0\.0\.0\.0/ {print $2}' /etc/hosts))
# 无拦截规则直接退出
if [ ${#block_list[@]} -eq 0 ]; then
    echo "未在/etc/hosts中找到0.0.0.0开头的拦截规则"
    exit 1
fi
# 实时监控本地DNS查询,命中黑名单就输出对应记录
tcpdump -l -i any udp dst port 53 | while read -r line; do
    for domain in "${block_list[@]}"; do
        if [[ "$line" == *"A? $domain"* ]]; then
            echo "0.0.0.0 $domain"
            break
        fi
    done
done

使用方法

  • 给脚本加执行权限:chmod +x hosts_block_monitor.sh
  • 用root权限运行即可拿到实时拦截日志:sudo ./hosts_block_monitor.sh

适配调整说明

  • 如果你的拦截规则是指向127.0.0.1,把脚本里awk匹配的0\.0\.0\.0改成127\.0\.0\.1即可
  • 脚本默认同域名多次访问只输出一次记录,如果你需要每次访问都输出,删除代码里的break即可
  • 部分系统默认没有安装tcpdump,可先执行sudo apt install tcpdump(Debian/Ubuntu)或者sudo dnf install tcpdump(RHEL/CentOS/Fedora)完成安装

内容的提问来源于stack exchange,提问作者tuqueque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 14:06:02