我正在尝试做跨平台开发,windows 7 主机,QNX Neutrino 目标。在尝试让跨平台开发工作之前,我想在我的主机上测试和使用代码,但 Windows 不支持 Pcap。
Pcap 和 WinPcap 之间的语法/函数调用有多相似?我可以将我为 WinPcap 编写的代码用于 Pcap 和另一台机器吗?
我正在尝试做跨平台开发,windows 7 主机,QNX Neutrino 目标。在尝试让跨平台开发工作之前,我想在我的主机上测试和使用代码,但 Windows 不支持 Pcap。
Pcap 和 WinPcap 之间的语法/函数调用有多相似?我可以将我为 WinPcap 编写的代码用于 Pcap 和另一台机器吗?
(大概您的意思是“libpcap 和 WinPcap”;“pcap”指的是“libpcap 和 WinPcap”或它们都使用的文件格式。)
WinPcap 是 libpcap 到 Windows 的一个端口,并且共享了很多 libpcap 的代码。它包括:
因此,libpcap 和 WinPcap 中的绝大多数调用是相同的,并且在 libpcap 和 WinPcap 之间共享尽可能多的代码,例如 libpcap-on-FreeBSD 和 libpcap-on-Linux。
API 的区别是:
pcap_open()
也没有远程捕获支持(将来会有通用的 API 来支持远程捕获,因此可以编写代码在 Windows 和各种 UN*Xes 上进行远程捕获);pcap_setbuff()
,但较新的版本允许您设置捕获缓冲区大小,如果您使用pcap_create()
和pcap_activate()
打开实时捕获,这些例程也在较新版本的 WinPcap 中;select()
/ poll()
vs. WaitForMultipleObjects()
),而且获取等待句柄的 API 是必要的,不同的;pcap_fopen_offline()
,可能永远不会出现,这要归功于不同版本的 MSVC 支持库彼此之间不兼容)。因此,对于几乎所有目的,只要您处理平台之间的其他差异,就应该可以编写适用于各种 UN*Xes(显然还有 QNX Neutrino)和 Windows 的基于 pcap 的代码。