的pcap_lookupdev()在errbuf可变填充时作为非超级用户运行,而相同功能时root运行返回第一个可用的网络接口的值.
操作系统或库是否禁用此访问权限.我认为这是操作系统.什么是正确的答案?
这不是一个家庭作业问题
在一般情况下,当谈到访问在UNIX(,因此,Linux)的文件,设备和操作系统提供的其他服务,接入模式实现在操作系统.
期望用户空间程序只是尝试他们想做的任何事情,并通过例如向用户通知消息来优雅地处理任何错误条件.
这有几个好处:
可维护性:访问策略实施仍在操作系统中,并且可以统一配置.想要限制对资源的访问权限的管理员一次这样做,而不是必须在这里配置这个库,而不是那个库,然后......
可配置性:管理员可以将所需的访问策略配置为简单或复杂,而不受每个用户空间实施的限制.
安全性:通常不应该通过强制执行访问策略来信任用户空间程序.这就像有一只狼守护着绵羊.
编辑:
在您的情况下,pcap需要低级访问网络接口.由于安全隐患(捕获网络流量,生成任意网络数据包等),此类访问仅限于特权用户.例如,在Linux上,pcap需要CAP_NET_RAW具备可供用户使用的功能.