恶意加密流量- pcap包解析

2022-10-05 16:06:26 浏览数 (1)

文章目录

  • python解析pyshark
  • 解析pcap
    • 什么是pcap?
    • 解析pcap包

python解析pyshark

代码语言:javascript复制
$ brew install shark
$ pip install pyshark
代码语言:javascript复制
import pyshark

def read_pcaps_shark(pcap_path):
    '''
    使用shark来读取pcap包
    '''
    pcap = pyshark.FileCapture(pcap_path)
    # print(pcap[0])
    for pkt in pcap:
        print(pkt.captured_length)
        print(pkt.highest_layer)
        print(pkt.length)
        print(pkt.number)
        print(pkt.sniff_timestamp)
        print(pkt.eth)
        print(pkt.ip)
        print(pkt.frame_info)
        print(pkt.sniff_time)
        print(pkt.tcp)
        break

if __name__ == "__main__":
    pcap_path = "../datasets/USTC-TFC2016/Benign/Weibo/Weibo-1.pcap"
    read_pcaps_shark(pcap_path)
    # read_pcap_dpkt(pcap_path)

解析pcap

什么是pcap?

  1. pcap是一种数据流格式,wireshark软件可以直接把网络数据流变成这种格式。
  1. 整个包只有一个Global Header定义了本数据包的读取规则/最大存长度限制等内容
    1. Magic:4Byte:标记文件开始,并用来识别文件自己和字节顺序。0xa1b2c3d4用来表示按照原来的顺序读取,0xd4c3b2a1表示下面的字节都要交换顺序读取。考虑到计算机内存的存储结构,一般会采用0xd4c3b2a1,即所有字节都需要交换顺序读取。
    2. Major:2Byte: 当前文件主要的版本号,一般为 0x0200【实际上因为需要交换读取顺序,所以计算机看到的应该是 0x0002】
    3. Minor:2Byte: 当前文件次要的版本号,一般为 0x0400【计算机看到的应该是 0x0004】
    4. ThisZone:4Byte:当地的标准时间,如果用的是GMT则全零,一般都直接写 0000 0000
    5. SigFigs:4Byte:时间戳的精度,设置为 全零 即可
    6. SnapLen:4Byte:最大的存储长度,如果想把整个包抓下来,设置为 ffff 0000,但一般来说 ff7f 0000就足够了【计算机看到的应该是 0000 ff7f 】
    7. LinkType:4Byte:链路类型,常用类型有以下几种,其他的,需要用的时候再查就行了。
      • 0 BSD loopback devices, except for later OpenBSD
      • 1 Ethernet, and Linux loopback devices
      • 6 802.5 Token Ring
      • 7 ARCnet
      • 8 SLIP
      • 9 PPP
      • 10 FDDI
      • 100 LLC/SNAP-encapsulated ATM
      • 101 “raw IP”, with no link
      • 102 BSD/OS SLIP
      • 103 BSD/OS PPP
      • 104 Cisco HDLC
      • 105 802.11
      • 108 later OpenBSD loopback devices (with the AF_value in network byte order)
      • 113 special Linux “cooked” capture
      • 114 LocalTalk
  2. Packet Header(共 16 Byte): Packet Header可以有多个,每个Packet Header后面会跟着一串Packet Data,Packet Header定义了Packet Data的长度、时间戳等信息
    1. Timestamp:被捕获时间的高位,单位是seconds
    2. Timestamp:被捕获时间的低位,单位是microseconds
    3. Caplen:当前数据区的长度,即抓取到的数据帧长度,不包括Packet Header本身的长度,单位是 Byte ,由此可以得到下一个数据帧的位置。
    4. Len:离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。
  3. Packet Data(共 Caplen Byte): 在包头之后,就是数据包的数据了,数据长度就是Caplen个Byte,在这之后就是一个新的Packet Header,定义一个新的Packet Data属性,再接一个新的Packet Data,如此循环。

解析pcap包

  • ROHC库的测试文件里找出来的其中一个数据流文件
代码语言:javascript复制
d4c3 b2a1 0200 0400 0000 0000 0000 0000
ff7f 0000 0100 0000                              # Global Header

e5da c850 fbdc 0800 2a00 0000 2a00 0000  # Packet Header
ffff ffff ffff 0000 0000 0000 0800 4500   
001c 0001 0000 4032 7cad 7f00 0001 7f00 
0001 0102 0304 0000 0001                      # Packet Data

eada c850 6d02 0100 2a00 0000 2a00 0000  # Packet Header
ffff ffff ffff 0000 0000 0000 0800 4500 
001c 0002 0000 4032 7cac 7f00 0001 7f00 
0001 0102 0304 0000 0002                      # Packet Data

eeda c850 9824 0800 2a00 0000 2a00 0000  # Packet Header
ffff ffff ffff 0000 0000 0000 0800 4500 
001c 0003 0000 4032 7cab 7f00 0001 7f00 
0001 0102 0304 0000 0003                      # Packet Data

f3da c850 250c 0100 2a00 0000 2a00 0000  # Packet Header
ffff ffff ffff 0000 0000 0000 0800 4500 
001c 0004 0000 4032 7caa 7f00 0001 7f00 
0001 0102 0304 0000 0004                     # Packet Data


2bdc c850 7952 0500 2a00 0000 2a00 0000 # Packet Header
ffff ffff ffff 0000 0000 0000 0800 4500
001c 2710 0000 4032 559e 7f00 0001 7f00
0001 0102 0304 0000 2710                      # Packet Data
  • 第二段
代码语言:javascript复制
e5da c850 fbdc 0800 2a00 0000 2a00 0000 
ffff ffff ffff 0000 0000 0000 0800 4500 
001c 0001 0000 4032 7cad 7f00 0001 7f00 
0001 0102 0304 0000 0001 

e5da c850 就是时间戳的高位 fbdc 0800 就是时间戳的低位 2a00 0000 就是数据包的大小,十六进制,转换成十进制,就是42 Byte 2a00 0000 就是抓到的包的大小 ffff ffff ffff 0000 0000 0000 0800 4500 001c 0001 0000 4032 7cad 7f00 0001 7f00 0001 0102 0304 0000 0001 就是数据包,长度一共是 42 Byte

0 人点赞