macOS 上的用户应用程序可以接收原始以太网数据包吗?我有一块硬件使用它自己的自定义以太网协议并定义了它自己的以太网类型。无论如何我可以创建一个发送/接收这些数据包的用户应用程序吗?Mac OS 不支持 AF_PACKET。我相信 Berkeley Packet Filter 需要 root 访问权限。还有其他选择吗?
2 回答
安装 libpcap 库 - https://formulae.brew.sh/formula/libpcap 然后你可以嗅探和/或注入任意数据包。
macOS 上的用户应用程序可以接收原始以太网数据包吗?
是的。例如,参见 /usr/sbin/tcpdump。
我相信 Berkeley Packet Filter 需要 root 访问权限。
是的,默认情况下;这就是 Wireshark 提供的“在系统启动时调整捕获权限的启动守护程序”所做的(它基于 libpcap 源代码分发中的内容) - 它使 BPF 设备可以由一个组读取和写入,所以如果您的代码与该组一起运行作为其组集中的组之一,它可以在 BPF 设备上读取(捕获)和写入(传输)。
还有其他选择吗?
PF_NDRV 套接字可能工作。例如,参见macOS/iOS/etc 中的本章。内部书和这个 StackOverflow 答案。
安装 libpcap 库
请注意,libpcap 作为 macOS 的一部分提供,而标头作为 macOS SDK 的一部分提供,因此,在 macOS 上,您可以构建使用它的程序,而无需安装 Xcode(或 Xcode 命令行工具)以外的任何东西,就像您可以在 Linux 上构建使用 libpcap 的程序,而无需安装编译器和您的发行版的 libpcap“开发人员包”之外的任何其他内容,并且您可以在 *BSD 上构建它,而无需安装安装程序要求的任何其他内容开发软件(它甚至可能默认安装编译器/链接器和适当的头文件)。