加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – Pcap和WinPcap有多相似?

发布时间:2020-12-14 04:25:29 所属栏目:Windows 来源:网络整理
导读:我正在尝试做跨平台开发,Windows 7主机,QNX Neutrino目标.在尝试使跨平台开发工作之前,我想测试并使用主机上的代码,但Windows上不支持Pcap. Pcap和WinPcap之间的语法/函数调用有多相似?我可以使用我为WinPcap编写的代码,让它适用于Pcap和不同的机器吗? 解
我正在尝试做跨平台开发,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-on-Linux.

API差异是:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读