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