gpt4 book ai didi

windows - Pcap 和 WinPcap 有多相似?

转载 作者:可可西里 更新时间:2023-11-01 14:03:14 24 4
gpt4 key购买 nike

我正在尝试进行跨平台开发,Windows 7 主机,QNX Neutrino 目标。在尝试进行跨平台开发之前,我想在我的主机上测试和试用代码,但 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 之间共享的代码与 libpcap-on-FreeBSD 和 libpcap-在 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*X(显然还有 QNX Neutrino)和 Windows 的基于 pcap 的代码.

关于windows - Pcap 和 WinPcap 有多相似?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31571328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com