2011-09-09 45 views
1

我試圖看看Brendan Gregg的sshkeysnoop.d能否在Mac OS X上工作,但遇到了麻煩。是否有可能得到這個工作?如果是這樣,怎麼樣?DTrace密鑰記錄器

我得到的錯誤是:

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

是否有可能使用DTrace做任何其他類型的鍵盤記錄的Mac OS X上?

回答

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 
1

OS X沒有syscall :: exec DTrace探針。它確實有一個syscall :: execve。同樣,它沒有syscall :: open64,它也被用在這個腳本中。但是,即使用execve替換exec並刪除open64,該腳本也不能正確運行。

0

還要確保您加載與所有選項

kldload dtraceall 

並不僅僅是

kldload dtrace 

還是系統調用都不會去加載。