【米尔瑞萨RZ/G2L开发板-创新应用】+基于libpcap的以太网数据测试(1)
基于libpcap的以太网数据测试1.libpcap介绍libpcap(Packet Capture Library),即数据包捕获函数库。在网络包抓取中libpcap是非常常用的一个库,著名的tcpdump就是用它来实现的。官方网站: https://www.tcpdump.org/libpcap是一个与实现无关的访问操作系统所提供的分组捕获函数库,用于访问数据链路层。这个库为不同的平台提供了一致的C函数编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由地跨平台使用。它支持多种操作系统。网站提供了libpcap各个版本的源码。libpcap也有编译好的版本,在windows上叫做winpcap,和libpcap完全兼容,并且提供相同的API。2.米尔SDK环境的建立这个过程参考文档《MYD-YG2LX_linux软件开发指南.pdf》中,2.2.2节 安装米尔定制SDK的相关说明。3.libpcap的交叉编译1) 从libpcap网站现在最新的源码: libpcap-1.10.42)解压源码到ubuntu系统中的合适目录中:tar xvf libpcap-1.10.4.tar.gz3)进入目录: cd libpcap-1.10.44)首先建立编译环境,执行:source/opt/yg2lx/environment-setup-aarch64-poky-linux 测试编译器,在提示符下执行 ${CC} –v ,如果查看到编译器的相关版本信息,说明编译器环境已经建立。5)执行libpcap的工程配置: ./configure –host=aarch64-linux- -with-pcap = linux
看到配置结果,没有任何异常错误信息,表示配置成功,生产了Makefile文件。6) 执行 make命令,完成编译,生成库文件。这个过程通常相当顺利。生成的库文件通过file命令查看的结果。
7)然后建立一个目录,用来存放编译的结果文件:mkdir _install执行:make install DESTDIR=/home/xxx/…/libpcap-1.10.4/_install 完成安装。
在安装目录下面生成了所需要的库文件和头文件等
4.开发板部署将交叉编译出的结果压缩一下,在安装目录下执行 tarcvflibpcap.tar.gz*并且将生成的压缩文件复制到开发板上。并且按照目录结构将所有文件解压缩到 /usr目录中,完成部署。5.libpcap的基本使用方法看了一些网络上的教程,也看了官方的文档,基本了解了libpcap的使用流程和方法。(1)接口选择。可以通过libpcap提供的接口函数列出系统内所有可以被监视的接口对象,但是我们通常希望指定所选择的接口。在Linux中,可能的以太网接口可以是ethx,例如eth0。在windows中,这个接口的名字比较复杂,但是我们可以通过一个简单的小程序软件获取所有接口的名称,然后选定需要的接口名称字符串来使用。
(2)初始化pcap。初始化过程中,需要提供设备接口名称,就是(1)中选定的。是否起用混杂模式,以及读取的超时时间等。(3)过滤条件设定。过滤条件可以包含例如协议类型、端口号、物理地址等,但是libpcap需要创建一个规则集合,编译并且使用它。这个过程分为三个相互紧密关联的阶段。 规则集合被置于一个字符串内,并且被转换成能被pcap读的格式(因此编译它)。编译实际上就是在我们的程序里调用一个不被外部程序使用的函数。接下来告诉 pcap使用它来过滤出所需的数据帧。(4)执行捕获。pcap进入它的主体执行循环。在这个阶段内pcap一直工作到它接收了所有我们想要的包为止。每当它收到一个包就调用回调解析函数,这个函数可以做我们想要的任何工作,它可以剖析所有捕获的包并给用户打印出结果,它可以将结果保存为一个文件,或者什么也不作。(5)在嗅探到所需的数据后,我们要关闭会话并结束。 6.libpcap的简单测试进入libpcap-1.10.4/testprogs/目录中,执行make 命令完成例程的编译。我们选择其中的几个例程在开发板上测试执行一下。6.1 例程findalldevstest测试赋予执行权限后,./findalldevstest 执行,输出了非常多的信息 root@myir-yg2lx:~/pcap-test#./findalldevstesteth0 Flags: UP, RUNNING (connected) Address Family: Unknown (17) Address Family: AF_INET Address: 172.17.100.101 Netmask: 255.255.0.0 Broadcast Address:172.17.255.255 Address Family: AF_INET6 Address:fe80::a8cb:7dff:fea6:e76d Netmask: ffff:ffff:ffff:ffff:: any Description: Pseudo-device thatcaptures on all interfaces Flags: UP, RUNNING lo Flags: UP, RUNNING, LOOPBACK Address Family: Unknown (17) Address Family: AF_INET Address: 127.0.0.1 Netmask: 255.0.0.0 Address Family: AF_INET6 Address: ::1 Netmask:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff eth1 Flags: UP (disconnected) Address Family: Unknown (17) docker0 Flags: UP (disconnected) Address Family: Unknown (17) Address Family: AF_INET Address: 172.17.0.1 Netmask: 255.255.0.0 Broadcast Address:172.17.255.255 dummy0 Flags: Address Family: Unknown (17) sit0 Flags: Address Family: Unknown (17) can0 Flags: wlan0 Flags: WIRELESS (not associated) Address Family: Unknown (17) bluetooth-monitor Description: Bluetooth Linux Monitor Flags: WIRELESS nflog Description: Linux netfilter log(NFLOG) interface Flags: nfqueue Description: Linux netfilter queue(NFQUEUE) interface Flags: dbus-system Description: D-Bus system bus Flags: dbus-session Description: D-Bus session bus Flags: Preferreddevice is on network: 172.17.0.0/255.255.0.0通过信息可以发现,eth0连接了网线,可以正常使用。6.2 例程opentest测试
通过opentest命令可以正确的打开eth0网口,说明了libpcap库部署已经成功了。6.3 例程writecaptest测试查看所有接口
捕获eth0网口数据,并存储到1.pcap文件中,这个文件可以通过wireshark软件解析。将这个文件复制到windows环境中。
通过wireshark软件打开刚才1.pcap文件,可以看到通过libpcap记录的网络数据帧信息。
7.在开发板上基于libpcap的程序开发 程序源码参见附件。8.Windows上的测试程序在windows上,使用winpcap来代替libpcap库,它们是全兼容的,安装可以参考它的官方网站: https://www.winpcap.org/Windows上的测试程序在QT中实现,调用winpcap的库。9.测试执行windows的QT测试程序,向网络上发送数据,数据发送间隔大约100us。wireshark捕获到windows测试程序发送的内容:协议类型为0x88BA
交叉编译源码,并将编译后的执行文件上传到开发板中。赋予执行权限,chmod +x pcaptest执行文件 ./pcaptest
将成功通过过滤的以太网帧数据显示了出来,说明libpcap可以正确的捕获到以太网数据,并且对于地址的过滤功能也已经起到了作用。
页:
[1]