2013-08-05 20 views
3

我製作了一個腳本(python + bash),它使用tcpdump來監視和過濾流經網絡接口的TCP標頭。它適用於所有接口,但當涉及到接口時,Mac需要以root用戶身份執行tcpdump(sudo)。如何監視Mac上的en0網絡接口,而不必使用sudo?

是否有任何編程解決方案,我可以繞過sudo運行它的需要?

我發現像wireshark這樣的工具能夠做到這一點,而不需要用戶輸入sudo密碼。

任何不需要sudo的解決方案都會很棒。

回答

2

如果您不需要處於混雜模式,那麼您可以使用tcpdump作爲普通用戶。使用'-p'選項來禁用混雜模式。

tcpdump -nni en0 -p 

如果您需要設置爲混雜模式的接口,那麼你可以啓用root帳戶,並通過蘇成爲root,然後繼續運行腳本。

su root - 
python myscript.py 

或者

su - 
python myscript.py 

使用sudo默認它可以像做(假定稱爲管理員管理員帳戶)

su Administrator 
sudo su 
python myscript.py 

如果你擔心密碼提示須藤可避免它通過配置/ etc/sudoers文件來使用NOPASSWD選項。然後,您可以在沒有密碼提示的情況下以普通用戶 的身份運行腳本。

您也可以嘗試給其他用戶的bpf設備文件讀取權限。 注意:我沒有測試過這個。

$ ls -l /dev/bpf* 
crw-rw---- 1 root access_bpf 23, 0 Aug 4 22:17 /dev/bpf0 
crw-rw---- 1 root access_bpf 23, 1 Aug 4 22:16 /dev/bpf1 
crw-rw---- 1 root access_bpf 23, 2 Aug 4 22:16 /dev/bpf2 
crw-rw---- 1 root access_bpf 23, 3 Aug 4 22:16 /dev/bpf3 

例如,

chmod o+r /dev/bpf* 
+1

在OS X上,您不需要root權限即可打開混雜模式;通過* default *,您需要它們來打開BPF設備,因爲默認情況下,它們是以權限rw -------'和用戶和組所有者root來創建的。 Wireshark安裝一個StartupItem,爲他們提供權限和組所有者,它們顯示在你的'ls -l'輸出中。 – 2013-08-05 18:00:05

+0

感謝您的更正Guy。 – jonschipp

6

是否有任何程序上的解決方案通過,我可以繞過需要使用sudo運行呢?

「programatic」是什麼意思?

方式的Wireshark確實這是它的安裝

  1. 創建access_bpf組,並把所述用戶到它;
  2. 安裝StartupItem,將當前BPF設備的組所有者更改爲access_bpf,並將其權限更改爲rw-rw----(根據jonschipp答案中的ls -l /dev/bpf*輸出);

使得誰安裝Wireshark的用戶可以運行使用BPF程序(使用的libpcap在OS X使用BPF的所有程序; tcpdump和Wireshark的都使用libpcap的),而不必運行它們作爲根(至少只要該程序不需要新的 BPF設備;它們根據需要自動創建,但它們的創建權限爲rw-------,並由用戶和組root擁有)。

所以,如果你已經安裝了Wireshark,你不僅可以像普通用戶一樣運行Wireshark(和TShark以及它們用於捕獲數據包的dumpcap程序)並捕獲流量,還可以,以普通用戶身份運行tcpdump並捕獲流量。

也就是說,它不是在Wireshark的代碼,使這一點,所以在這個意義上不是「程序化」,它是由Wireshark的安裝,使該裝的東西,它使它所有程式。

相關問題