基于libpcap的以太网数据测试
- libpcap介绍
libpcap(Packet Capture Library),即数据包捕获函数库。在网络包抓取中libpcap是非常常用的一个库,著名的tcpdump就是用它来实现的。
官方网站: javascript:;
libpcap是一个与实现无关的访问操作系统所提供的分组捕获函数库,用于访问数据链路层。这个库为不同的平台提供了一致的C函数编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由地跨平台使用。它支持多种操作系统。
网站提供了libpcap各个版本的源码。libpcap也有编译好的版本,在windows上叫做winpcap,和libpcap完全兼容,并且提供相同的API。
- libpcap的安装
在visionfive2上安装libpcap非常的容易,因为官方已经提供了兼容的版本,可以像安装其它应用那样直接安装就可以了。
执行
sudo apt install libpcap-dev
安装libpcap的开发版,便于我们后面开发测试和应用。
在windows上winpcap的安装可以参考它的官方网站:
javascript:;
- libpcap的基本使用方法
看了一些网络上的教程,也看了官方的文档,基本了解了libpcap的使用流程和方法。
(1)接口选择。可以通过libpcap提供的接口函数列出系统内所有可以被监视的接口对象,但是我们通常希望指定所选择的接口。
在Linux中,可能的以太网接口可以是eth0,在visionfive2中是end0或end1。
在windows中,这个接口的名字比较复杂,但是我们可以通过一个简单的小程序软件获取所有接口的名称,然后选定需要的接口名称字符串来使用。
(2)初始化pcap。初始化过程中,需要提供设备接口名称,就是(1)中选定的。是否起用混杂模式,以及读取的超时时间等。
(3)过滤条件设定。过滤条件可以包含例如协议类型、端口号、物理地址等,但是libpcap需要创建一个规则集合,编译并且使用它。这个过程分为三个相互紧密关联的阶段。 规则集合被置于一个字符串内,并且被转换成能被pcap读的格式(因此编译它)。编译实际上就是在我们的程序里调用一个不被外部程序使用的函数。接下来告诉 pcap使用它来过滤出所需的数据帧。
(4)执行捕获。pcap进入它的主体执行循环。在这个阶段内pcap一直工作到它接收了所有我们想要的包为止。每当它收到一个包就调用回调解析函数,这个函数可以做我们想要的任何工作,它可以剖析所部获的包并给用户打印出结果,它可以将结果保存为一个文件,或者什么也不作。
(5)在嗅探到所需的数据后,我们要关闭会话并结束。
- VF2上的捕获测试程序
程序源码参见附件。
- Windows上的测试程序
Windows上的测试程序在QT中实现,调用winpcap的库。程序源码参见附件。
- 测试
1) windows测试程序的执行,windows 程序负责以200ns为间隔发送50帧特定的以太网帧,协议类型0x88BA,客户数据的第一个字节自加测试。
2)wireshark捕获到windows测试程序发送的内容:协议类型为0x88BA
3) 交叉编译或在VF2上直接编译源码,并将编译后的执行文件上传到visionfive2中,我这里通过交叉编译,可执行文件为main。
需要注意一点,在vf2上运行这个程序需要提供管理员权限,因此需要执行:
sudo ./main
可以看到,成功的捕获到了所需要的数据,因为程序中我使用了物理地址过滤条件,所以只有满足条件的数据出现在了屏幕上。
本文来自论坛,点击查看完整帖子内容。