Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Pcap和WinPcap有多相似?_Windows_Cross Platform_Libpcap_Winpcap_Qnx Neutrino - Fatal编程技术网

Windows Pcap和WinPcap有多相似?

Windows Pcap和WinPcap有多相似?,windows,cross-platform,libpcap,winpcap,qnx-neutrino,Windows,Cross Platform,Libpcap,Winpcap,Qnx Neutrino,我正在尝试跨平台开发,Windows7主机,QNX中微子目标。在尝试进行跨平台开发之前,我想在主机上测试和使用代码,但Windows不支持Pcap Pcap和WinPcap之间的语法/函数调用有多相似?我能把我为WinPcap编写的代码用于Pcap和另一台机器吗?(你大概是指“libpcap和WinPcap”;“Pcap”指的是“libpcap和WinPcap”或它们都使用的文件格式。) WinPcap是libpcap到Windows的一个端口,它共享很多libpcap的代码。它包括: 一个p

我正在尝试跨平台开发,Windows7主机,QNX中微子目标。在尝试进行跨平台开发之前,我想在主机上测试和使用代码,但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等)
  • 共享平台无关代码
  • pcap-win32.c调用的Packet.dll库以及Packet.dll与之通信的驱动程序
  • 一些附加的例程
因此,libpcap和WinPcap中的绝大多数调用是相同的,并且libpcap和WinPcap之间共享的代码与FreeBSD上的libpcap和Linux上的libpcap之间共享的代码一样多

API的区别是:

  • libpcap没有
    pcap_open()
    ,也没有远程捕获支持(将来,将有用于远程捕获支持的通用API,因此可以编写代码在Windows和各种UN*XE上进行远程捕获)
  • libpcap没有
    pcap\u setbuff()
    ,但较新版本允许您在使用
    pcap\u create()
    pcap\u activate()
    打开实时捕获时设置捕获缓冲区大小,这些例程也在较新版本的WinPcap中
  • 如果您想使用平台的“等待一组输入源上的可用输入”机制,那么这些机制不仅具有不同的API(
    select()
    /
    poll()
    WaitForMultipleObjects()
    ),而且获得等待句柄的API也必然不同
  • libpcap没有“统计模式”、采样或“直接转储到内核中的文件”(这些需要内核模式支持;在Windows上,WinPcap必须包含一个驱动程序,因此可以提供该驱动程序,但在UN*Xes上,libpcap取决于操作系统提供的驱动程序)
  • libpcap不支持任意调整“内核缓冲区中导致从应用程序读取的数据返回的最小数据量”,尽管较新版本支持“即时模式”,即数据包一到达就发送
  • libpcap中的一些较新API还不在WinPcap中(有些API,例如
    pcap\u fopen\u offline()
    ,可能永远不会在WinPcap中,因为MSVC支持库的不同版本彼此之间不兼容二进制文件)
因此,在几乎所有情况下,只要处理平台之间的其他差异,就可以编写基于pcap的代码,在各种UN*XE(显然还有QNX中微子)和Windows上工作