如何监控Mac上的en0网络接口,而不必使用sudo?

时间:2013-08-05 01:07:01

标签: macos networking interface monitor tcpdump

我制作了一个脚本(python + bash),它使用tcpdump来监视和过滤流经网络接口的TCP标头。它适用于所有接口,但是当涉及 ethernet en0 接口时,Mac要求以root用户(sudo)执行tcpdump。

是否有任何编程解决方案可以绕过使用sudo运行它的需要?

我发现像wireshark这样的工具可以在不请求用户输入sudo密码的情况下执行此操作。

任何不需要sudo的解决方案都会很棒。

2 个答案:

答案 0 :(得分:6)

  

是否有任何编程解决方案可以绕过使用sudo运行它的需要?

“编程”是什么意思?

Wireshark执行此操作的方式是其安装程序

  1. 创建一个access_bpf组并将用户放入其中;
  2. 安装一个StartupItem,将当前BPF设备的组所有者更改为access_bpf,并将其权限更改为rw-rw----(根据jonschipp的答案中的ls -l /dev/bpf*输出); < / LI>

    这样安装Wireshark的用户可以运行使用BPF的程序(使用libpcap的所有程序在OS X上使用BPF; tcpdump和Wireshark都使用libpcap)而不必以root身份运行它们(至少只要程序不运行)不需要新的 BPF设备;它们会根据需要自动创建,但它们是使用权限rw-------创建的,并由用户和组root拥有。)

    因此,如果你已经安装了Wireshark,你不仅可以运行Wireshark(和TShark,以及它们都用来进行数据包捕获的dumpcap程序)作为普通用户并捕获流量,例如,你也可以以普通用户身份运行tcpdump并捕获流量。

    也就是说,Wireshark 代码中没有启用它的功能,所以它在这个意义上并不是“编程”,它是由Wireshark 安装程序安装的,它启用了这个功能,它为所有程序启用它。

答案 1 :(得分:2)

如果您不需要处于混杂模式,那么您可以将tcpdump用作普通用户。使用'-p'选项禁用混杂模式。

tcpdump -nni en0 -p

如果您需要将接口设置为混杂模式,那么您可以启用root帐户并通过su成为root用户,然后继续运行您的脚本。

su root -
python myscript.py

或者

su -
python myscript.py

使用sudo默认值可以像(假设一个名为Administrator的管理员帐户)

那样完成
su Administrator
sudo su
python myscript.py

如果你担心密码提示,sudo可以通过配置/ 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

e.g。

chmod o+r /dev/bpf*