端口上的Cocoa Monitor数据包

时间:2012-09-27 09:09:39

标签: macos cocoa packet-sniffers packets kernel-extension

我想监视Mac OS X中特定端口上的数据包。能够读取其内容并有时更改其内容(如果可能)。我想知道是否可以通过编写KEXT或者我可以在应用程序中执行此操作并立即显示结果。我将非常感谢有关我可以用来实现这一目标的库和方法的任何信息。

3 个答案:

答案 0 :(得分:2)

“监控数据包”在什么意义上?

如果您的意思是“查看发送或发送特定TCP或UDP端口的数据包”或“在特定网络接口上发送或接收的数据包”,您将使用pcap library,就像在其他联合国一样* XES。 libpcap / WinPcap是Wireshark和tcpdump使用的库;在OS X上,它使用的底层内核机制是BPF(Berkeley Packet Filter),它内置在XNU中(它是开源的 - 参见bsd/net/bpf.cbsd/net/bpf_filter.c文件,以及头文件它们包括在XNU源中)并且不需要kext。 (Wireshark没有自己的kext;它使用libpcap / WinPcap,因此它可以在Linux和OS X和* BSD以及Solaris和HP-UX以及AIX和Tru64 UNIX和IRIX等上运行,以及在Windows上运行安装了WinPcap,因此,在OS X和* BSD上,它最终使用BPF。)

除了Linux之外,Libpcap / WinPcap不允许你在一个“句柄”的所有接口上捕获;您必须使用pcap_findalldevs()来查找所有当前可用的接口,然后为每个接口打开单独的句柄。如果“端口”是指“网络端口”,那么一个“端口”是您的以太网端口而另一个是您的Wi-Fi适配器,则您必须单独打开要捕获的所有“端口”。

如果“端口”是指TCP或UDP端口,并且您只想查看特定端口的流量,则必须指定“过滤器”表达式,并使用{{将其转换为“BPF代码” 1}},然后使用pcap_compile()使其成为特定libpcap / WinPcap句柄的过滤器。

如果你想为pcap使用Cocoa包装器,我之前做过的Google搜索packetsnifferCapKit;我没有使用其中任何一个,所以我不能推荐其中一个。

答案 1 :(得分:1)

你见过Apple's overview documentation on Network Kernel Extensions吗?这应该让你开始。

this book的可下载源代码还包含网络堆栈各个级别的一些数据包过滤示例NKE。 (这本书当然也在第13章中详细解释了这些内容)

您也可以重新使用现有的开源kext进行纯监控:Wireshark应用程序已经执行此操作,您应该可以挂钩其kext。对于实际修改数据包流,您可能必须完全在内核中执行此操作。

答案 2 :(得分:0)

因为OS X和iOS是Unix而Objective-C是C,所以答案是,“就像你在C语言中用它做的那样” - Cocoa是高级别的,你想做的是低级别。我在SO上找不到问题,但有人建议查看MenuMeters的来源作为网络监控的一个例子。