zoukankan      html  css  js  c++  java
  • Debug --> 对于pcap包中的某一packet的小分析

    目前想自己手动解析一个packet,所以需要回顾一下计网的相关知识奥!

    以下一个TCP连接的某一packet为例,说明各个报文头的每个字节的含义!

    首先,我们使用wireshark,打开【事先提取好的一个TCP连接】一个pcap文件,它由几个packet组成,我们将以下图第一个packet为例。

    其实现在,我们想要用python,读取出这些十六进制数,并且分析它代表什么,那我们需要了解的,有关报文相关格式奥!

    在wireshark给出的分析中,图里有四行(若有数据,则为5行),来解释一下它们的含义。

    A. 第一行,帧Frame 1 指的是要发送的数据块,其中,所抓帧的序号为1,捕获字节数等于传送字节数:70字节;

    B. 第二行,以太网,有线局域网技术,是数据链路层。源Mac地址为00:c1:b1:14:eb:31;目的Mac地址为00:19:b9:0a:69:f1;

    C. 第三行,IPV4协议,也称网际协议,是网络层。源IP地址为172.16.0.1;目的IP地址为192.168.10.50;

    D. 第四行,TCP协议,也称传输控制协议,是传输层。源port(40718);目的port(80);序列号(0);长度为0;【因为是第一次握手,所以没有ACK字段。ACK是TCP数据包首部中的确认标志,对已接收到的TCP报文进行确认,值为1表示确认号有效】

    E. 第五行【若有】,数据共有的字节数。

    那么,如何将上述信息与十六进制数进行对应呢?我们首先给出一个小总结,并对每一部分进行解释。

    一、数据链路层(Ethernet帧,14字节)

    包含:

    1.接收数据帧的目的mac地址(dst_mac,6字节)00:19:b9:0a:69:f1

    2.发送数据帧的源mac地址(src_mac,6字节)00:c1:b1:14:eb:31

    3.接下来的2个字节标识出以太网帧所携带的上层数据类型,如下:

    IPv4: 0x0800 【例子中给出】

    ARP:0x0806

    PPPoE:0x8864

    802.1Q tag: 0x8100

    IPV6: 0x86DD

    MPLS Label:0x8847

    二、网络层(IP分组,一般20字节)

     包含:

    1.版本号(4位 45):IP协议的版本号 4-> IPv4   6->IPv6

    2.首部长度(4位 45):IP分组首部长度,以4字节为单位 5->IP首部长度为20(5*4)字节

    【以上两个共占一个字节】

    3.服务类型(区分服务,TOS,8位,一个字节 00):指示期望获得哪种类型的服务,只有在网络提供区分服务(DiffServ)时使用,一般情况下不使用,通常IP分组的该字段(第二字节)的值为00H

    4.总长度(16位,2个字节 00 3c):IP分组的总字节数(首部+数据),最大总长度->65535B 最小的IP分组首部->20B 故IP分组可以封装的最大数据为:65535-20=66515B

    5.标识(16位 19 8b

    6.标识位和片偏移(共16位 40 00 -> 0100 0000 0000 0000):片偏移为0

    7.生存时间(TTL 一个字节 3e):IP分组在网络中可以通过的路由器数(跳步数),路由器转发一次分组,TTL-1,如果TTL=0,则路由器丢弃该IP分组

    8.协议(一个字节 06):指示IP分组封装的是哪个协议的数据包,可以用于实现复用/分解 6->TCP 17->UDP

    9.首部校验和(两个字节 ac 45):实现对IP分组首部的差错检测,计算校验和时,该字段置全0;采用反码算数运算求和,和的反码作为首部校验和字段;逐跳计算、逐跳校验

    10.源IP地址(32位,4个字节 ac 10 00 01):发送分组的源主机/路由器(网络接口)的IP地址 172.16.0.1

    11.目的IP地址(32位,4个字节 c0 a8 0a 32):接收分组的目的主机/路由器 (网络接口)的IP地址 192.168.10.50

    12.选项字段(长度可变,本例中无):范围在1~40B之间:携带安全、源选路径、时间戳和路由记录等内容,实际上很少被使用

         填充字段(长度可变):范围在0~3B之间,目的是补齐整个 首部,符合32位对齐,即保证首部长度是4字节的倍数

    三、传输层(TCP报文段,segment,20~60字节的首部,其中20字节是没有选项的,后面40字节可选。)

     【哪个看着舒服,选哪个奥,哈哈哈哈哈哈哈!】

     包含:

    1.源地址端口(16位,2个字节 9F 0E = 40718):发送该报文段的主机中应用程序的端口号

    2.目的地址端口(16位,2个字节 00 50 = 80 http):标识出远端端口号

    【端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。】

    3.本次发送的序号字段(th_seq,4个字节 fc 85 f3 f7 = 4236637175):TCP 连接中传送的数据流中的每一个字节都编上一个序号,序号字段的值则指的是本报文段所发送的数据的第一个字节在整个报文字节流中的序号(用来解决网络包乱序(reordering)问题)

    4.确认号字段(th_ack,4个字节 00 00 00 00 = 0):是期望收到对方的下一个报文段的数据的第一个字节的序号(用于确认收到,用来解决不丢包的问题)

     5. 下两个字节(a0 02 = 1010 0000 0000 0010)是4位首部长度和6位标志符,中间是6位保留字段

    (1)首部长度(4 位):以32bit为单位的TCP首部长度。最多16行,64字节;固定5行,20字节。也叫做data offset,是因为data的第一个字节前面都是首部且offset从0开始,首部行数和data offset相等

    (2)六个标志位,依次是:

    紧急比特 URG —— 当 URG =1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送。(一般不使用)
    确认比特 ACK —— 只有当 ACK =1 时确认号字段才有效。当 ACK = 0 时,确认号无效。
    推送比特 PSH (PuSH) —— 接收 TCP** 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
    复位比特 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
    同步比特 SYN —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。
    终止比特 FIN (FINal) —— 用来释放一个连接。当FIN=1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

    6.接收窗口字段(2 字节, 72 10):用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限,这也就是著名的滑动窗口(SlidingWindow),用于流量控制

    7.校验和(2 字节, e1 f7):校验的范围包括首部和数据两部分

    8. 紧急指针(2 字节, 00 00):指出在本报文段中的紧急数据的最后一个字节的序号

    9.可选项(40字节可选信息)

    (1)MSS:TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段(不包括首部)的最大长度是 MSS 个字节。

    这两天将尝试自己对十六进制字节进行解析,努力早日完成下一篇博客啦!

    【最后,这里给出几个对于packet分析较为详细的文章,以供参考哦!】

    1. https://blog.csdn.net/hebbely/article/details/54424823/

    2. https://blog.csdn.net/u013319359/article/details/81051489

    3. https://blog.csdn.net/xu_ya_fei/article/details/46482129

    To see I can not see, to know I do not know.
  • 相关阅读:
    hdu2717 Catch That Cow
    hdu1017
    Html5 学习笔记 【PC固定布局】 实战2 导航栏搜索区域
    Html5 学习笔记 【PC固定布局】 实战1 导航栏
    Html5 学习笔记 Sublime text3 和 Emmet 插件
    Html5 学习笔记 --》布局
    Html5 学习笔记 --》css3 学习
    Html5 学习笔记 --》html基础 css 基础
    数据库备份
    spring boot 尚桂谷学习笔记11 数据访问03 JPA
  • 原文地址:https://www.cnblogs.com/aluomengmengda/p/15489959.html
Copyright © 2011-2022 走看看