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

Oce*_*lot 3 macos networking interface monitor tcpdump

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

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

我发现像wireshark这样的工具能够在不请求用户输入sudo密码的情况下完成.

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

小智 6

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

"编程"是什么意思?

Wireshark这样做的方式就是它的安装程序

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

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

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

也就是说,Wireshark 代码中没有能够实现这一点的东西,所以它在这个意义上并不是"编程",它是由Wireshark 安装程序安装的,可以实现这一点,并且可以为所有程序启用它.