以pcap_lookupdev()
非 root 用户运行时填充 errbuf 变量,而以 root 用户运行时,相同的函数返回第一个可用网络接口的值。
操作系统或库是否禁用了此访问权限。我认为是操作系统。什么是正确答案?
这不是作业问题
一般来说,当涉及到访问操作系统提供的文件、设备和其他服务时,Unix(以及Linux)中的访问模型是在操作系统中实现的。
用户空间程序应该只是尝试他们想做的任何事情,并通过例如用消息通知用户来优雅地处理任何错误情况。
这有几个优点:
可维护性:访问策略实施保留在操作系统中,并且可以统一配置。想要限制对资源的访问的管理员这样做一次,而不是必须在这里配置这个库,而不是那里的那个库,然后......
可配置性:管理员可以配置他们需要的简单或复杂的访问策略,而不受每个用户空间实现的限制。
安全性:通常不应信任用户空间程序来执行访问策略。这就像让狼看守羊。
编辑:
在您的情况下,pcap
需要对网络接口进行低级访问。由于安全隐患(捕获网络流量、生成任意网络数据包等),此类访问仅限于特权用户。例如,在 Linux 上,pcap
需要用户可以使用该功能CAP_NET_RAW
。
许多 pcap 函数需要 root 权限才能正常工作。这可能是问题吗?
它主要取决于操作系统。并非所有pcap
功能在所有操作系统上都需要 root 权限。
请参阅参考手册页,分别列出所有特殊权限要求。