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

如何追踪/监听macOS路由变更,获取route命令的调用参数

捕获路由修改操作的3种可用方案

方案1:用dtruss直接捕获route命令全参数

你之前只看到stat64调用是因为没有指定跟踪execve类系统调用,执行以下命令即可捕获所有进程调用route时的完整参数:

sudo dtruss -f -t execve 2>&1 | grep -A3 "route"

输出会直接展示route后的所有传入参数,同时会显示调用route的父进程PID,方便定位源程序。

方案2:自定义DTrace脚本全场景捕获路由变更

该方案除了捕获route命令调用外,还能捕获程序直接调用内核API修改路由的行为,覆盖所有修改场景:

  1. 新建route_snoop.d文件,写入以下内容:
#!/usr/sbin/dtrace -s
#pragma D option quiet

/* 捕获/sbin/route命令调用场景 */
syscall::execve:entry
/execname == "route"/
{
    printf("[%Y] PID: %d | Parent PID: %d | Route命令: ", walltimestamp, pid, ppid);
    this->i = 0;
    while (copyinstr(arg1[this->i]) != NULL) {
        printf("%s ", copyinstr(arg1[this->i]));
        this->i++;
    }
    printf("\n");
}

/* 捕获内核层面路由新增/修改/删除操作 */
fbt::route_add:entry,
fbt::route_change:entry,
fbt::route_delete:entry
{
    printf("[%Y] PID: %d | 进程名: %s | 内核路由操作: %s\n", walltimestamp, pid, execname, probefunc);
}
  1. 赋予执行权限并运行:
chmod +x route_snoop.d
sudo ./route_snoop.d

方案3:无需DTrace的轻量方案

直接使用macOS自带的execsnoop工具即可快速捕获route调用:

sudo execsnoop -v | grep route

输出的ARGS列即为route命令的完整参数,PPID列即为调用route的源进程ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:57:04