文章目录
1、摘要
Tcpdump
+ Wireshark
实现,在 Linux
里抓包,然后在wireshark
里分析包。
2、软件安装
2.1、Wireshark安装
Wireshark
下载地址:https://www.wireshark.org/download.html
在线指导手册:
https://www.wireshark.org/docs/wsug_html_chunked/index.html
2.2、Tcpdump安装
Tcpdump
下载:https://www.tcpdump.org/
下载:libpcap-1.9.0
、tcpdump-4.9.2
解压完成后:
编译libpcap
:
cd libpcap-1.9.0
设置为T3
交叉编译链
export CC=/tools/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin/arm-linux-gnueabi-gcc
配置
./configure --host=arm-linux --with-pcap=linux
编译
Make
编译tcpdump
cd tcpdump-4.9.2
export ac_cv_linux_vers=3
export CFLAGS=-static
export CPPFLAGS=-static
export LDFLAGS=-static
配置
./configure --host=arm-linux --disable-ipv6
编译
Make
还可以压缩可执行文件:
arm-linux-gnueabi-strip tcpdump
3、tcpdump使用:
在AIBOX
有两个网卡:与TBOX
通信的eht0
, 与DVR
通信的usb0
(1)抓AIBOX
与DVR
相关的网络包,capture1.pcap
。
./tcpdump -i usb0 -w capture1.pcap
(2)抓AIBOX
与TBOX
之间的网络包,保存为capture2.pcap
。
./tcpdump -i eth0 -w capture2.pcap
4、Wireshark使用:
4.1、快捷键:
快捷键 | 内容 |
---|---|
Ctrl + → | 在数据包详细信息中,打开所有树项 |
Ctrl + ← | 在数据包详细信息中,关闭所有树项 |
Ctrl + ↑ | 即使数据包列表未聚焦,也要移至下一个数据包 |
Ctrl + ↓ | 即使数据包列表未聚焦,也请移至上一个数据包。 |
Shift + → | 在数据包详细信息中,打开所选树项及其所有子树 |
4.2、主界面介绍:
Packet List
(数据包列表):这个最上面的面板用表格显示了当前捕获文件中的所有数据包,其中包括了数据包序号、数据包被捕获时的相对时间、数据包的源地址和目标地址、数据包的协议以及在数据包中找到的概况信息等列。
Packet Details
(数据包细节);这个中间的面板分层次地显示了一个数据包中的内容,并且可以通过展开或是收缩来显示这个数据包中所捕获到的全部内容。
Packet Bytes
(数据包字节);这个最下面的面板可能是最令人困惑的,因为它显示了一个数据包未经处理的原始样子,也就是其在链路上传播时的样子。这些原始数据看上去一点都不舒服而且不容易理解。
4.3、数据包细节介绍:
Frame
:物理层的数据帧概况。Ethernet II
:数据链路层以太网帧头部信息。Internet Protocol Version 4
:互联网层IP
包头部信息。User Datagram Protocol, Src Port
: 传输层的数据段头部信息,此处是UDP
协议。Network Time Protocol(NTP Version 4, client)
应用层的信息,此处是NTP
协议。
(1)Frame
:数据链路层以太网帧头部信息。
(2)Ethernet II
数据链路层以太网帧头部信息。
(3)Internet Protocol Version 4
:互联网层IP
包头部信息
(4)User Datagram Protocol, Src Port
: 传输层的数据段头部信息,此处是UDP
协议。
5、T3中相关数据包分析:
5.1、:ARP
地址解析协议(Address Resolution Protocol
),其基本功能为透过目标设备的IP
地址,查询目标设备的MAC
地址,以保证通信的顺利进行。
过程:
(1)TBOX
首先查看自己的ARP
表,如果找到了对应的MAC
地址,则TBOX
直接利用ARP
表中的MAC
地址,对IP
数据包进行帧封装,并将数据包发送给主机B
。
因为没有找到进行第二步:
(2)若TBOX
自己的ARP
表没有找到对应MAC
地址,则将缓存该数据报文,然后以广播方式发送一个ARP
请求报文。ARP
请求报文中的发送端IP
地址和发送端MAC
地址为TBOX
的IP
地址和MAC
地址,目标IP
地址和目标MAC
地址为主机B
的IP
地址和全0
的MAC
地址。
(3)AIBOX
比较自己的IP
地址和ARP
请求报文中的目标IP
地址,当两者相同时进行如下处理:将ARP
请求报文中的发送端(即TBOX
)的IP
地址和MAC
地址存入自己的ARP
表中。之后以单播方式发送ARP
响应报文给TBOX
,其中包含了自己的MAC
地址。
4)主机A收到ARP
响应报文后,将主机B
的MAC
地址加入到自己的ARP
表中以用于后续报文的转发。
5.2、:DNS
AIBOX
进行DNS
域名解析:
北京时间的NTP
服务器:time.buptnet.edu.cn ->202.112.10.60
阿里云NTP
服务器:ntp1.aliyun.com -> 120.25.115.20
5.3、:NTP
网络校时:
5.4、:MQTT
报文结构:
报文第一字节内容:
1. 连接CONNECT
/连接确认CONNACK
格式:
固定报头:0x10
剩余长度
可变报头:协议名( Protocol Name
)
协议级别( Protocol Level
)
连接标志( Connect Flags
)
保持连接( Keep Alive
)
连接标志位具体作用:
-
保留标志位(第
0
位):是否为0
,如果不为0
必须断开客户端连接 。 -
清理会话位置(第
1
位): 为 1客户端和服务端必须丢弃之前的任何会话并开始一个新的会话。 -
遗嘱标志位置(第
2
位): 设置为0
连接标志中的Will QoS
和Will Retain
字段必须设置为0
,并且有效载荷中不能包含Will Topic
和WillMessage
字段,网络连接断开时,不能发送遗嘱消息。 -
遗嘱
QoS
位置(第4
和第3
位)。这两位用于指定发布遗嘱消息时使用的服务质量等级,因为此例遗嘱标志位置被置0
,所以0
,遗嘱QoS
也必须设置为0
(0x00
)。 -
遗嘱保留位置(第
5
位) 遗嘱标志被设置为0
, 遗嘱保留(Will Retain
)标志也必须设置为0
-
用户名标志位置(第
7
位)。此例用户名标志被设置为0
,有效载荷中不能包含用户名字段 -
密码标志位置(第
6
位)。因为此例用户名标志被设置为0
,密码标志也必须设置为0
。
2. 确认连接:
格式:
固定报头:0x20
0x02
可变报头:连接确认标志、连接返回码
其中:连接状态码相关值:
返回码响应 | 描述 |
---|---|
0x00 |
连接已被服务端接受 |
0x01 |
服务端不支持客户端请求的 MQTT 协议级别 |
0x02 |
客户端标识符是正确的 UTF-8 编码, 但服务端不允许使用 |
0x03 |
网络连接已建立, 但 MQTT 服务不可用 |
0x04 |
用户名或密码的数据格式无效 |
0x05 |
客户端未被授权连接到此服务器 |
3. 消息订阅SUBSCRIBE
/订阅确认SUBACK
定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的payload
,才能进行通信。
格式:
固定报头:0x82
剩余长度
可变报头:报文标识符
Payload
: 主体过滤器(Tpoic Filter
)、服务质量要求(Qos
)
4. SUBACK
(订阅确认)
格式:
固定报头:0x90
剩余长度
可变报头:报文标识符
Payload
: 和Tpoic Filter
对应的实际Qos
清单
其中Qos
服务质量等级列表:
5. 发布消息PUBLISH
6. Publish ACK
格式:
固定报头:0x40
0x20
可变报头:等待确认的PUBLISH
报文的报文标识符
Payload
: 无
7. MQTT
心跳