1

我试图查看是否可以让 Brendan Gregg 的 sshkeysnoop.d 在 Mac OS X 上运行,但遇到了麻烦。有可能让这个工作吗?如果是这样,怎么做?

我得到的错误是:

dtrace: failed to compile script ./sshkeysnoop.d: line 40: probe description syscall::exec:return does not match any probes

是否可以使用 DTrace 在 Mac OS X 上进行任何其他类型的键记录?

4

3 回答 3

1

OS X 没有 syscall::exec DTrace 探测器。它确实有一个 syscall::execve。同样,它没有 syscall::open64,此脚本中也使用了它。但是,即使将 exec 替换为 execve 并删除 open64,脚本也无法正常运行。

于 2011-09-09T01:33:28.460 回答
1

你可以做几件事来适应这样的脚本。首先可以问dtrace一下它有哪些探测点:

$ sudo dtrace -l -f 'syscall::exec*'
   ID   PROVIDER            MODULE                          FUNCTION NAME
18442    syscall                                              execve entry
18443    syscall                                              execve return

其次,您可以跟踪单个进程上的所有系统调用以查看发生了什么。

$ sudo dtruss ssh somewhere 2>dtrussout
Password: (type something here)

如果你看透dtrussout你会看到

read_nocancel(0x5, "a\0", 0x1)       = 1 0
read_nocancel(0x5, "s\0", 0x1)       = 1 0
read_nocancel(0x5, "d\0", 0x1)       = 1 0
read_nocancel(0x5, "f\0", 0x1)       = 1 0
read_nocancel(0x5, "\n\0", 0x1)      = 1 0

有了这些知识,改编脚本就很容易了。

$ diff sshkeysnoop.d{.orig,}
40c40
< syscall::exec:return, syscall::exece:return
---
> syscall::execve:return
51c51
< syscall::open:entry, syscall::open64:entry
---
> syscall::open:entry
58c58
< syscall::open:return, syscall::open64:return
---
> syscall::open:return
68c68
< syscall::read:entry
---
> syscall::read_nocancel:entry
75c75
< syscall::read:return
---
> syscall::read_nocancel:return
于 2011-09-17T08:03:04.160 回答
0

还要确保您正在加载所有选项

kldload dtraceall

而不仅仅是

kldload dtrace

或者系统调用不会被加载。

于 2014-04-11T11:04:22.777 回答