Pcap和WinPcap有多相似?

Gre*_*age 4 windows cross-platform winpcap libpcap qnx-neutrino

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

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

小智 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-on-Linux.

API差异是:

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

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