设为首页收藏本站
查看: 1258|回复: 0

【米尔瑞萨RZ/G2L开发板-创新应用】+基于libpcap的以太网数据测试(1)

[复制链接]

2

主题

4

回帖

146

积分

注册会员

积分
146
我爱下载 发表于 2023-8-15 17:24:47 | 显示全部楼层 |阅读模式
基于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.4
2)解压源码到ubuntu系统中的合适目录中:tar xvf libpcap-1.10.4.tar.gz
3)进入目录: cd libpcap-1.10.4
4)首先建立编译环境,执行:source/opt/yg2lx/environment-setup-aarch64-poky-linux
   测试编译器,在提示符下执行 ${CC} –v ,如果查看到编译器的相关版本信息,说明编译器环境已经建立。
1.jpg
5)执行libpcap的工程配置:
    ./configure –host=aarch64-linux  - -with-pcap = linux
2.jpg
3.jpg
看到配置结果,没有任何异常错误信息,表示配置成功,生产了Makefile文件。
6) 执行 make命令,完成编译,生成库文件。这个过程通常相当顺利。生成的库文件通过file命令查看的结果。
4.jpg
7)然后建立一个目录,用来存放编译的结果文件:mkdir _install
执行:make install DESTDIR=/home/xxx/…/libpcap-1.10.4/_install 完成安装。
5.jpg
在安装目录下面生成了所需要的库文件和头文件等
6.jpg
4.  开发板部署
将交叉编译出的结果压缩一下,在安装目录下执行 tarcvf  libpcap.tar.gz  *
并且将生成的压缩文件复制到开发板上。
并且按照目录结构将所有文件解压缩到 /usr目录中,完成部署。
5.  libpcap的基本使用方法
看了一些网络上的教程,也看了官方的文档,基本了解了libpcap的使用流程和方法。
(1)接口选择。可以通过libpcap提供的接口函数列出系统内所有可以被监视的接口对象,但是我们通常希望指定所选择的接口。
在Linux中,可能的以太网接口可以是ethx,例如eth0。
在windows中,这个接口的名字比较复杂,但是我们可以通过一个简单的小程序软件获取所有接口的名称,然后选定需要的接口名称字符串来使用。
7.jpg
(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#./findalldevstest
eth0
        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测试
8.jpg
通过opentest命令可以正确的打开eth0网口,说明了libpcap库部署已经成功了。
6.3 例程writecaptest测试
查看所有接口
9.jpg
捕获eth0网口数据,并存储到1.pcap文件中,这个文件可以通过wireshark软件解析。将这个文件复制到windows环境中。
10.jpg
  通过wireshark软件打开刚才1.pcap文件,可以看到通过libpcap记录的网络数据帧信息。
11.jpg
7.  在开发板上基于libpcap的程序开发
程序源码参见附件。 pcaptest.tar.gz (7.85 MB, 下载次数: 225)
8.  Windows上的测试程序
在windows上,使用winpcap来代替libpcap库,它们是全兼容的,安装可以参考它的官方网站:
Windows上的测试程序在QT中实现,调用winpcap的库。
9.  测试
执行windows的QT测试程序,向网络上发送数据,数据发送间隔大约100us。
wireshark捕获到windows测试程序发送的内容:协议类型为0x88BA
12.jpg
交叉编译源码,并将编译后的执行文件上传到开发板中。
赋予执行权限,chmod +x pcaptest
执行文件 ./pcaptest
13.jpg
将成功通过过滤的以太网帧数据显示了出来,说明libpcap可以正确的捕获到以太网数据,并且对于地址的过滤功能也已经起到了作用。

回复

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-11-23 16:06 , Processed in 0.054410 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表