macOS上的用户应用程序可以接收原始以太网数据包吗?

时间:2018-02-26 19:18:46

标签: macos ethernet raw-ethernet

macOS上的用户应用程序是否可以接收原始以太网数据包?我有一块硬件使用它自己的自定义以太网协议,并定义了自己的以太类型。无论如何我可以创建一个发送/接收这些数据包的用户应用程序吗? Mac OS不支持AF_PACKET。我相信Berkeley Packet Filter需要root访问权限。还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

安装 libpcap 库 - https://formulae.brew.sh/formula/libpcap 然后你可以嗅探和/或注入任意数据包。

答案 1 :(得分:0)

<块引用>

macOS 上的用户应用程序能否接收原始以太网数据包?

是的。例如,请参见 /usr/sbin/tcpdump。

<块引用>

我认为 Berkeley Packet Filter 需要 root 访问权限。

是的,默认情况下;这就是 Wireshark 提供的“在系统启动时调整捕获权限的启动守护程序”所做的(它基于 libpcap 源代码发行版中的内容)-它使 BPF 设备可以由一组读取和写入,因此如果您的代码与该组一起运行作为其组集中的组之一,它可以在 BPF 设备上读取(捕获)和写入(传输)。

<块引用>

还有其他选择吗?

PF_NDRV 套接字可能有效。例如,参见 this chapter from a macOS/iOS/etc. internal bookthis StackOverflow answer

<块引用>

安装 libpcap 库

请注意,libpcap 作为 macOS 的一部分提供,而头文件作为 macOS SDK 的一部分提供,因此,在 macOS 上,您可以构建使用它的程序,而无需安装 Xcode(或 Xcode 命令行工具)以外的任何其他程序,就像您可以在 Linux 上构建使用 libpcap 的程序而无需安装编译器和发行版的 libpcap“开发人员包”以外的任何东西,并且您可以在 *BSD 上构建它而无需安装任何安装程序所说的内容您需要开发软件(它甚至可能默认安装编译器/链接器和适当的头文件)。