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

Linux系统如何检测已建立连接的指定域名访问状态

Linux瞬时检测指定域名访问的实现方案

核心逻辑说明:Linux内核网络栈仅记录连接的目标IP地址,不直接存储关联域名,因此检测需要先完成目标域名的实时IP解析,再匹配当前系统的活跃外联连接,命中即判定存在访问行为,完全满足脚本瞬时执行检测的需求。


可直接嵌入脚本的检测命令

优先使用系统默认预装的ss工具(已替代废弃的netstat,检测效率更高),以下是两种适配不同环境的实现:

方案1:检测准确率最高的通用版本(推荐)

需要依赖dig工具做域名解析,覆盖域名所有对应公网IP,漏检率极低:

# 替换为你需要检测的目标域名
TARGET_DOMAIN="www.youtube.com"

# 解析目标域名当前所有有效IPv4地址
target_ip_list=$(dig +short "$TARGET_DOMAIN" | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' | tr '\n' ' ')

# 检测当前是否存在指向目标IP、端口为80/443的已建立TCP连接(即网页访问行为)
if [ -n "$target_ip_list" ] && ss -t state established -n dst $target_ip_list 'dport = :80 or dport = :443' | grep -q ESTAB; then
    # 此处放置检测命中后要执行的预设命令,比如发送通知
    # 注意:crontab环境下发桌面通知需要先指定DBUS地址,参考后续注意事项
    echo "检测到目标域名访问"
fi

如果系统没有dig命令,对应安装方式:

  • Debian/Ubuntu系列:执行apt update && apt install -y dnsutils
  • CentOS/RHEL系列:执行yum install -y bind-utils

方案2:无额外依赖的轻量版本

适合不想安装额外工具的最小化系统,用系统自带的getent做域名解析:

TARGET_DOMAIN="www.youtube.com"
target_ip_list=$(getent ahosts "$TARGET_DOMAIN" | awk '{print $1}' | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' | sort -u | tr '\n' ' ')

if [ -n "$target_ip_list" ] && ss -t state established -n dst $target_ip_list 'dport = :80 or dport = :443' | grep -q ESTAB; then
    # 放置你的触发命令
    notify-send "检测到受限网站访问"
fi

适配crontab场景的注意事项

  • 桌面通知无法在crontab默认环境下直接弹出,需要在触发通知前添加环境变量指定当前用户的会话总线:export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u 你的实际用户名)/bus
  • 每分钟执行的频率完全可以覆盖普通网页/APP访问场景,常规TCP连接建立后会保持数十秒到数分钟,不会出现瞬时漏检
  • 如果需要检测非网页类的域名访问(比如客户端走非80/443端口),删掉命令里的'dport = :80 or dport = :443'过滤条件即可
  • 不要直接使用ss/netstat自带的域名解析参数,内置解析速度慢且容易漏匹配多IP域名,手动预解析IP再匹配的方式稳定性高很多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:57:21