0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【RT-Thread学习笔记】如何抓取终端的网络报文

嵌入式物联网开发 来源:嵌入式物联网开发 作者:嵌入式物联网开发 2022-07-30 13:57 次阅读

文章目录

  • 1 写在前面
  • 2 需求分析
  • 3 几个方法
  • 4 原理分析
  • 5 方法实践
    • 5.1 工具准备
    • 5.2 详细步骤
  • 6 经验总结
  • 7 参考链接
  • 8 更多分享


作者:架构师李肯

一个专注于嵌入式IoT领域的架构师。有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于主流RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、主流IoT云平台的对接、嵌入式IoT系统的架构设计等等。拥有多项IoT领域的发明专利,热衷于技术分享,有多年撰写技术博客的经验积累,连续多月获得RT-Thread官方技术社区原创技术博文优秀奖,荣获CSDN博客专家、CSDN物联网领域优质创作者、2021年度CSDN&RT-Thread技术社区之星、RT-Thread官方嵌入式开源社区认证专家、RT-Thread 2021年度论坛之星TOP4、华为云云享专家(嵌入式物联网架构设计师)等荣誉。坚信【知识改变命运,技术改变世界】!


1 写在前面

在平时工作中的网络编程开发,少不了要通过抓取网络报文来分析网络问题的应用场景。有的时候,你可能通过代码排查得焦头烂额,毫无头绪,但是只要一把网络报文拎出来一看,一下子思路就打开了。

但是,一个嵌入式设备要怎么才能抓取其网络设备呢?

假如我们的这个嵌入式设备,跑的就是普通的 RTOS 系统,不像嵌入式Linux系统那样,还可以使用诸如 tcpdump 这种命令行工具来抓取网络报文,他们可能连基本的DEBUG输入都不一样有,仅有一个输出LOG的串口。

那么,面对这种嵌入式设备,我们能够怎么抓取其网络报文呢?

本文将为你揭晓答案,且文中描述的方法也是笔者多年调试网络问题,一直在使用的方法,希望对大家有所帮助。

2 需求分析

回到问题本身,其实需求还是比较明确的,就是需要抓取一个嵌入式设备的网络报文,且这个设备不具备命令行抓取的能力,只能使用外部设备辅助完成。

同时,这个嵌入式设备可能使用的是 以太网通讯、4G/5G等蜂窝网络通讯、Wi-Fi通讯,针对这样多样化的通讯方式,是否能找出一种比较通用的抓包方式,满足这几种通讯方式下的抓包需求,这是我们所追求的。

3 几个方法

本文先简单介绍下,面对这种嵌入式设备的网络抓包场景,可能使用到的几种方法,但本文将会重点介绍其中的一种,其他的几种,后面有空再另行整理。

  • 使用路由器、交互就镜像抓包
  • 使用PC无线热点捕获抓包
  • 使用网络代理(中转服务器)抓包
  • 使用特殊工具抓无线空口数据包

以上几种方法,各个各的优势,适用于不同的应用场景,灵活选用即可。

像我这边目前碰到的应用场景,都是一些基于 Wi-Fi 通讯的终端设备,所以对我而言,采用第二种 PC无线热点捕获 抓包,就是一个最佳选择。

4 原理分析

使用 PC无线热点捕获抓包 的这种方式,网络拓扑图如下所示:

在这里插入图片描述

5 方法实践

5.1 工具准备

如上面描述的抓包原理,你需要:

一台具备网络能力的PC主机:如果设备需要连公网,这台主机还需要具备公网连接的能力;

一个迷你的无线网卡:最简单的就类似 360Wi-Fi 那种USB无线网卡;如果你准备的主机是一台笔记本的话,则可以不需要额外准备外置的无线网卡;

Windows下的Wireshark抓包工具:强大的网络报文抓取和分析工具;

若干终端设备:配置好终端设备,使其连接由PC发射处理的无线热点。

5.2 详细步骤

1)第一步自然把相关的工具准备好,相关的软件安装好

安装wireshark可以参考 教程,最重要的是,记得把 WinPcapUSBPcap 安装上:

imgimg

2)配置PC环境,把无线热点给发射出来

这里如果是 笔记本自带了无线网卡的,可以参考这个 教程 把无线热点搞起来。

如果是台式主机,需要外置无线网卡的,强力建议使用 360Wi-Fi,主要是廉价、便捷,应用这种抓包场景绰绰有余。

另外,它还有一个配套的上位机工具,长这样,基本就可以一件傻瓜式地就可以把无线热点给发射出来;同时,在上位机这还能看到当前有哪些设备正连着这个无线热点,真的非常地方便。

image-20220726003951917

3)配置终端设备连接对应的无线热点

上面的步骤完成后,终端设备就可以连接上对应的无线热点了,这个时候理论上,终端就已经借助PC的网络能力,它自己也具备了对外连接网络的能力。

4)操作Wireshark抓包工具

打开wireshakr软件,在首页会看到很多网卡设备,有无线的,也有有线的,这些有波浪线的表示当前有网络数据在流动:

image-20220726004336727

但是,你可能会发现这里并没有那个发射无线热点的 网卡设备 (图中的WLAN是我笔记本的内置无线网卡)。

我们可以查看下系统 网卡适配器:

image-20220726004554579

5)配置下无线网卡适配器【关键步骤】

这个时候我们需要去配置一下无线网卡适配器,找到对应的无线网卡:

右键 -》属性,找到下面的这个选项,勾选上,最后确认:

image-20220726004806654

6)刷新wireshark的网卡设备列表

wireshark的主界面,再菜单栏找到【捕获】-> 【刷新接口列表】,这个时候下面就会把无线网络给显示出来了:

image-20220726005013480

7)启动wireshark抓包

双击对应的无线网卡设备,开始启动抓包,同时在终端发起一些网络交互,这时就可以看到wireshark中有网络报文刷出来了。动态图如下所示:

2022-07-27-23-40-35

8)wireshark的网络报文过滤

这个操作需要知道终端侧,在访问哪个服务器,比如访问百度网页,我们需要先知道百度的IP是多少,然后利用wireshark的过滤规则,直接把这部分网络报文给帅选出来。

比如我这里查到的百度域名解析出来的IP地址是:14.215.177.224,那么我就可以这么过滤抓包,动态图如下:

2022-07-27-23-53-15

比如我要抓取TLS相关报文,我可以利用 端口号是443 这个特性来抓取报文:

2022-07-27-23-55-50

同时,你的终端设备要访问其他服务器,也是可以用相同的操作原理把它抓出来。

9)实战网络报文分析

值得注意的是,我们这里抓取的报文可能是纯TCP的,也可能是TLS的,使用wireshark的报文分析工具就可以分析出来了。

具体可以参考一些网络报文分析教程,这里不再赘述。

6 经验总结

  • 抓包方法很多,适合自己的才是最好的;
  • 无论哪种抓包方法,能拿到有效的网络报文就是王道,至少操作的便捷性,能用能知道;
  • wireshark分析网络报文的能力很重要,几个重要的基础操作一定要非常熟练;
  • 分析网络报文需要具备扎实的网络基本功,必要的时候,好好补一补网络报文的核心知识。

7 参考链接

  • Wireshark安装教程
  • Win10系统创建WiFi热点的两种方法
  • WireShark使用教程
  • Wireshark常用过滤使用方法
  • 360随身WiFi - 360WiFi官网

8 更多分享

欢迎关注我的github仓库01workstation,日常分享一些开发笔记和项目实战,欢迎指正问题。

同时也非常欢迎关注我的CSDN主页和专栏:

【CSDN主页:架构师李肯】

【RT-Thread主页:架构师李肯】

【C/C++语言编程专栏】

【GCC专栏】

信息安全专栏】

【RT-Thread开发笔记】

freeRTOS开发笔记】

有问题的话,可以跟我讨论,知无不答,谢谢大家。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18281

    浏览量

    288402
  • 网络
    +关注

    关注

    14

    文章

    7251

    浏览量

    87440
  • RT-Thread
    +关注

    关注

    31

    文章

    1148

    浏览量

    38868
收藏 人收藏

    评论

    相关推荐

    RT-Thread学习笔记】使用scons命令生成静态库

    RT-Thread学习笔记】如何使用scons 命令中buildlib的生成静态库?
    的头像 发表于 07-27 09:13 4754次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】使用scons命令生成静态库

    RT-Thread学习笔记】ARM汇编基础的三大块知识

    RT-Thread学习笔记】ARM汇编基础的三大块知识
    的头像 发表于 07-30 10:59 1605次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】ARM汇编基础的三大块知识

    RT-Thread学习笔记】一种C语言宏定义的写法

    RT-Thread学习笔记】一种C语言宏定义的写法
    的头像 发表于 07-30 13:41 1941次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】一种C语言宏定义的写法

    RT-Thread Nano入门学习笔记

    RT-Thread Nano入门学习笔记
    发表于 11-26 12:36 20次下载
    <b class='flag-5'>RT-Thread</b> Nano入门<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    RT-Thread 应用笔记 - libmodbus RTU RS485 从机

    RT-Thread 应用笔记 - 不正确使用LOG也会引发hard faultRT-Thread 应用笔记 - RTC Alarm 组件的使用RT-
    发表于 01-25 18:15 8次下载
    <b class='flag-5'>RT-Thread</b> 应用<b class='flag-5'>笔记</b> - libmodbus RTU RS485 从机

    RT-Thread 应用笔记 - RTC Alarm 组件的使用

    RT-Thread 应用笔记 - 不正确使用LOG也会引发hard faultRT-Thread 应用笔记 - RTC Alarm 组件的使用RT-
    发表于 01-25 18:18 10次下载
    <b class='flag-5'>RT-Thread</b> 应用<b class='flag-5'>笔记</b> - RTC Alarm 组件的使用

    RT-Thread 内核学习笔记 - 理解defunct僵尸线程

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:19 8次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 理解defunct僵尸线程

    RT-Thread 内核学习笔记 - 设备模型rt_device的理解

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:19 8次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 设备模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 内核学习笔记 - 内核对象链表结构深入理解

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:23 6次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象链表结构深入理解

    RT-Thread 内核学习笔记 - 内核对象初始化链表组织方式

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:24 3次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象初始化链表组织方式

    RT-Thread 内核学习笔记 - 内核对象操作API

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:26 7次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象操作API

    RT-Thread学习笔记 RT-Thread的架构概述

    RT-Thread 简介 作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接触,你会逐渐发现 RT-Thread 的魅力和它相较于其他同类型 RTOS
    的头像 发表于 07-09 11:27 3996次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b> <b class='flag-5'>RT-Thread</b>的架构概述

    RT-Thread学习笔记】Makefile的FORCE

    RT-Thread学习笔记】十分钟学会Makefile的FORCE
    的头像 发表于 07-30 13:55 1651次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】Makefile的FORCE

    RT-Thread学习笔记】用memwatch排除内存泄露

    RT-Thread学习笔记】使用memwatch排除内存泄露
    的头像 发表于 07-30 14:01 1725次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】用memwatch排除内存泄露

    基于RT-Thread Studio学习

    前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。
    的头像 发表于 05-15 11:00 2580次阅读
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>学习</b>