Pcap和WinPcap有多类似?

我正试图做跨平台开发,QNX Neutrino目标。 在尝试跨平台开发的工作之前,我想testing一下主机上的代码,但是Windows上不支持Pcap。

Pcap和WinPcap之间的语法/函数调用有多相似? 我可以把我写的WinPcap的代码,并为Pcap和一台不同的机器吗?

(推测你的意思是“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之间共享的代码与在FreeBSD上的libpcap-on-Linux上的libpcap-on之间的代码相同。

API的差异是:

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

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