【发布时间】:2013-06-26 22:32:02
【问题描述】:
我正在尝试检测我机器上的所有网络适配器 (OSx 10.8)。所以我有这段小而典型的代码:
int main()
{
pcap_if_t *alldevs;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_findalldevs(&alldevs, errbuf);
...
}
当我执行这个时,链表:pcap_if_t 是空的并且 errbuf 也是清楚的。这可能是权限问题吗?在这种情况下,我希望向 errbuf 写入一些内容,但这是一个假设。发生这种情况的任何其他原因?是的..我在这台机器上有可用的网络适配器:)
谢谢
【问题讨论】:
-
不,如果一个(或多个或所有)设备由于权限而无法打开,它根本不会在列表中,不会返回错误。从手册页:“..请注意,调用 pcap_findalldevs() 的进程可能无法打开某些网络设备,因为例如,该进程可能没有足够的权限打开它们进行捕获;如果是这样,这些设备不会出现在列表中..."
-
好的。说得通。我将以更高的权限进行测试。
-
这就是答案。我将上面的代码移到控制台应用程序中进行测试。 $sudo myapp
-
您可能想回答自己的问题,所以这个问题显示为已回答,答案是“您需要足够的权限”。 (请注意,在 *BSD、OS X 和越狱的 iOS 上,“足够的权限”是指“打开
/dev/bpf*设备的足够权限;如果这些设备可以由除 root 之外的用户或组读取,则该用户或用户在该组中具有足够的权限。例如,Wireshark 会安装一个脚本以将用户放入具有这些权限的组中。)
标签: c macos pcap libpcap tcpdump