【问题标题】:libpcap - pcap_findalldevs returns NULL on MacOSxlibpcap - pcap_findalldevs 在 MacOSx 上返回 NULL
【发布时间】: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


【解决方案1】:

我在 Xcode 中运行了您的代码并让它工作。您很可能会遇到权限问题。如果您使用的是 Xcode,请转到项目的方案进行编辑,然后在“调试进程为”下,选择 root。系统将提示您输入密码以运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2011-02-06
    • 2016-01-26
    • 2021-11-21
    • 2015-06-11
    相关资源
    最近更新 更多