Pcap和WinPcap有多相似?

时间:2015-07-22 18:35:20

标签: windows cross-platform libpcap winpcap qnx-neutrino

我正在尝试跨平台开发,Windows 7主机,QNX Neutrino目标。在尝试使跨平台开发工作之前,我想测试并在我的主机上使用代码,但Windows上不支持Pcap。

Pcap和WinPcap之间的语法/函数调用有多相似?我可以使用我为WinPcap编写的代码,让它适用于Pcap和不同的机器吗?

1 个答案:

答案 0 :(得分:5)

(可能你的意思是“libpcap和WinPcap”;“pcap”指的是“libpcap和WinPcap”或它们都使用的文件格式。)

WinPcap是一个libpcap到Windows的端口,并共享很多libpcap的代码。它包括:

  • 一个pcap-win32.c文件,其中包含“适应层”以支持Windows上与平台无关的API(就像使用BPF的平台的pcap-bpf.c和Linux的pcap-linux.c一样)等);
  • 独立于共享平台的代码;
  • Packet.dll库,pcap-win32.c调用,以及Packet.dll与之通信的驱动程序;
  • 添加了一些例程。

因此,libpcap和WinPcap中的绝大多数调用相同,并且在libpcap和WinPcap之间共享尽可能多的代码,例如,libpcap-on-FreeBSD和libpcap-上的Linux。

API差异是:

  • libpcap没有pcap_open()并且没有远程捕获支持(将来,将会有用于远程捕获支持的通用API,因此可以编写代码以在Windows上进行远程捕获各种UN * Xes);
  • libpcap没有pcap_setbuff(),但是如果您使用pcap_create()pcap_activate()打开实时捕获,则可以使用较新版本设置捕获缓冲区大小,这些例程也在较新版本的WinPcap;
  • 如果您想使用平台的“等待一组输入源上可用的输入”机制,那么这些机制不仅具有不同的API(select() / poll()与{{1}获取等待句柄的API必然是不同的;
  • libpcap没有“统计模式”,采样或“直接转储到内核中的文件”(那些需要内核模式支持;在Windows上,WinPcap必须包含驱动程序,因此可以提供,但是在UN * Xes上,libpcap取决于操作系统提供的内容);
  • libpcap不支持任意调整“内核缓冲区中导致应用程序读取返回的最小数据量”,尽管较新的版本支持“立即模式”,其中数据包一发送就会立即传送到达;
  • libpcap中的一些较新的API还没有在WinPcap中(有些,例如WaitForMultipleObjects(),可能永远不会,因为不同版本的MSVC支持库彼此不是二进制兼容的。)

因此,对于几乎所有目的,只要你处理平台之间的其他差异,应该可以编写适用于各种UN * Xes(以及显然,QNX Neutrino)和Windows的基于pcap的代码。