pacp python 解析数据 - CSDN
精华内容
参与话题
  • Python读取pcap包

    千次阅读 2020-07-10 17:33:02
    /usr/bin/env python #coding=utf-8 #读取pcap文件,解析相应的信息,为了在记事本中显示的方便,把二进制的信息 import struct fpcap = open('test.pcap','rb') ftxt = open('result.txt','w') string_data = ...
    #!/usr/bin/env python
    #coding=utf-8
    
    import struct
    
    fpcap = open('test.pcap','rb')
    ftxt = open('result.txt','w')
    
    string_data = fpcap.read()
    
    #pcap文件包头解析
    pcap_header = {}
    pcap_header['magic_number'] = string_data[0:4]
    pcap_header['version_major'] = string_data[4:6]
    pcap_header['version_minor'] = string_data[6:8]
    pcap_header['thiszone'] = string_data[8:12]
    pcap_header['sigfigs'] = string_data[12:16]
    pcap_header['snaplen'] = string_data[16:20]
    pcap_header['linktype'] = string_data[20:24]
    #把pacp文件头信息写入result.txt
    ftxt.write("Pcap文件的包头内容如下: \n")
    for key in ['magic_number','version_major','version_minor','thiszone',
                'sigfigs','snaplen','linktype']:
        ftxt.write(key+ " : " + repr(pcap_header[key])+'\n')
              
    
    #pcap文件的数据包解析
    step = 0
    packet_num = 0
    packet_data = []
    
    pcap_packet_header = {}
    i =24
    
    while(i<len(string_data)):
         
          #数据包头各个字段
          pcap_packet_header['GMTtime'] = string_data[i:i+4]
          pcap_packet_header['MicroTime'] = string_data[i+4:i+8]
          pcap_packet_header['caplen'] = string_data[i+8:i+12]
          pcap_packet_header['len'] = string_data[i+12:i+16]
          #求出此包的包长len
          packet_len = struct.unpack('I',pcap_packet_header['len'])[0]
          #写入此包数据
          packet_data.append(string_data[i+16:i+16+packet_len])
          i = i+ packet_len+16
          packet_num+=1
       
       
       
       
    #把pacp文件里的数据包信息写入result.txt
    for i in range(packet_num):
        #先写每一包的包头
        ftxt.write("这是第"+str(i)+"包数据的包头和数据:"+'\n')
        for key in ['GMTtime','MicroTime','caplen','len']:
            ftxt.write(key+' : '+repr(pcap_packet_header[key])+'\n')
        #再写数据部分
        ftxt.write('此包的数据内容'+repr(packet_data[i])+'\n')
    ftxt.write('一共有'+str(packet_num)+"包数据"+'\n')
          
    ftxt.close()
    fpcap.close()
    

    最终得到的result文件如下所示:字段显示的都是十六进制,其中的数据部分和wireshark打开,显示的十六进制窗口一样。

    (其实如果程序想到得到某一个或某几个字节的十进制数,用struct还是很容易转换的)
    在这里插入图片描述

    展开全文
  • Python读取pcap文件

    千次阅读 2015-08-26 20:34:47
    Python读取pcap文件   (2010-01-24 18:29:39) 转载▼ 标签:  python   pcap   文件头   十六进制   包头   it 分类: Python  想试一试读取...

    Python读取pcap文件

     (2010-01-24 18:29:39)
    标签: 

    python

     

    pcap

     

    文件头

     

    十六进制

     

    包头

     

    it

    分类: Python

        想试一试读取pcap文件的内容,并且分析出pcap文件头,每一包数据的pcap头,每一包的数据内容(暂时不包括数据包的协议解析),关于pcap文件的格式,可以参看:http://blog.sina.com.cn/s/blog_4b5039210100fzrt.html

        搞了一下午,写了一个py文件,rdpcap.py,想把里面的二进制文件全部弄成十六进制的,然后作为字符串写入到一个txt文件,转化成字符串是为了显示看起来方便。

        程序如下:

     

    #!/usr/bin/env python
    #coding=utf-8
    #读取pcap文件,解析相应的信息,为了在记事本中显示的方便,把二进制的信息

    import struct

    fpcap = open('test.pcap','rb')
    ftxt = open('result.txt','w')

    string_data = fpcap.read()

    #pcap文件包头解析
    pcap_header = {}
    pcap_header['magic_number'] = string_data[0:4]
    pcap_header['version_major'] = string_data[4:6]
    pcap_header['version_minor'] = string_data[6:8]
    pcap_header['thiszone'] = string_data[8:12]
    pcap_header['sigfigs'] = string_data[12:16]
    pcap_header['snaplen'] = string_data[16:20]
    pcap_header['linktype'] = string_data[20:24]
    #把pacp文件头信息写入result.txt
    ftxt.write("Pcap文件的包头内容如下: \n")
    for key in ['magic_number','version_major','version_minor','thiszone',
                'sigfigs','snaplen','linktype']:
        ftxt.write(key+ " : " + repr(pcap_header[key])+'\n')
              

    #pcap文件的数据包解析
    step = 0
    packet_num = 0
    packet_data = []

    pcap_packet_header = {}
    i =24

    while(i<len(string_data)):
         
          #数据包头各个字段
          pcap_packet_header['GMTtime'] = string_data[i:i+4]
          pcap_packet_header['MicroTime'] = string_data[i+4:i+8]
          pcap_packet_header['caplen'] = string_data[i+8:i+12]
          pcap_packet_header['len'] = string_data[i+12:i+16]
          #求出此包的包长len
          packet_len = struct.unpack('I',pcap_packet_header['len'])[0]
          #写入此包数据
          packet_data.append(string_data[i+16:i+16+packet_len])
          i = i+ packet_len+16
          packet_num+=1
       
       
       
       
    #把pacp文件里的数据包信息写入result.txt
    for i in range(packet_num):
        #先写每一包的包头
        ftxt.write("这是第"+str(i)+"包数据的包头和数据:"+'\n')
        for key in ['GMTtime','MicroTime','caplen','len']:
            ftxt.write(key+' : '+repr(pcap_packet_header[key])+'\n')
        #再写数据部分
        ftxt.write('此包的数据内容'+repr(packet_data[i])+'\n')
    ftxt.write('一共有'+str(packet_num)+"包数据"+'\n')
          
    ftxt.close()
    fpcap.close()

     

    最终得到的result文件如下所示:字段显示的都是十六进制,其中的数据部分和wireshark打开,显示的十六进制窗口一样。

    (其实如果程序想到得到某一个或某几个字节的十进制数,用struct还是很容易转换的)

    Python读取pcap文件

    展开全文
  • python处理pcap文件——数据提取

    千次阅读 2020-04-09 22:43:57
    对pcap文件中每个包进行内容提取.../usr/bin/env python #coding=utf-8 #读取pcap文件,解析相应的信息,为了在记事本中显示的方便,把二进制的信息 import struct import time, datetime def time_trans(GMTtime...

    对pcap文件中每个包进行内容提取,提取出pcap头每个包header和data部分,存入txt

    这是对网上的一份代码的优化修改

    #!/usr/bin/env python
    #coding=utf-8
    #读取pcap文件,解析相应的信息,为了在记事本中显示的方便,把二进制的信息
    
    import struct
    import time, datetime
    
    def time_trans(GMTtime):
      #print(GMTtime)
      timeArray = time.localtime(GMTtime)
      otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
      return otherStyleTime   # 2013--10--10 23:40:00
    
    class pcap_packet_header:
      def __init__(self):
        self.GMTtime = b'\x00\x00'  
        self.MicroTime = b'\x00\x00'  
        self.caplen = b'\x00\x00' 
        self.lens = b'\x00\x00' 
    
    if __name__=='__main__':
    
      fpcap = open('1.pcap','rb')
      ftxt = open('result.txt','w')
      
      string_data = fpcap.read()
      
      #pcap文件包头解析
      pcap_header = {}
      pcap_header['magic_number'] = string_data[0:4]
      pcap_header['version_major'] = string_data[4:6]
      pcap_header['version_minor'] = string_data[6:8]
      pcap_header['thiszone'] = string_data[8:12]
      pcap_header['sigfigs'] = string_data[12:16]
      pcap_header['snaplen'] = string_data[16:20]
      pcap_header['linktype'] = string_data[20:24]
      #把pacp文件头信息写入result.txt
      ftxt.write("Pcap文件的包头内容如下: \n")
      for key in ['magic_number','version_major','version_minor','thiszone',
                  'sigfigs','snaplen','linktype']:
          ftxt.write(key+ " : " + repr(pcap_header[key])+'\n')  
    
      #pcap文件的数据包解析
      step = 0
      packet_num = 0
      packet_data = []
      
      pcap_packet_header_list = []
      i =24
      
      while(i<len(string_data)):
        
        #数据包头各个字段bytes     
        GMTtime = string_data[i:i+4]
        MicroTime= string_data[i+4:i+8]
        caplen = string_data[i+8:i+12]
        lens = string_data[i+12:i+16]
        #数据包各个字段的正常表示
        packet_GMTtime = struct.unpack('I',GMTtime)[0]
        packet_GMTtime= time_trans(packet_GMTtime)
        packet_MicroTime = struct.unpack('I',MicroTime)[0]
        packet_caplen = struct.unpack('I',caplen)[0]
        packet_len = struct.unpack('I',lens)[0]
        #数据包头对象
        head=pcap_packet_header()
        head.GMTtime=packet_GMTtime
        head.MicroTime=packet_MicroTime
        head.caplen=packet_caplen
        head.lens=packet_len
    
        
        #print(head.MicroTime)
        #print(packet_MicroTime)
        pcap_packet_header_list.append(head)
        #print(packet_len)
        #写入此包数据
        packet_data.append(string_data[i+16:i+16+packet_len])
        i = i+ packet_len+16
        packet_num+=1
        #a=input()
         
      #把pacp文件里的数据包信息写入result.txt
      for i in range(packet_num):
          #先写每一包的包头
          ftxt.write("这是第"+str(i)+"包数据的包头和数据:"+'\n')
          ftxt.write('GMTtime'+' : '+repr(pcap_packet_header_list[i].GMTtime)+'\n')
          ftxt.write('MicroTime'+' : '+repr(pcap_packet_header_list[i].MicroTime)+'\n')
          ftxt.write('caplen'+' : '+repr(pcap_packet_header_list[i].caplen)+'\n')
          ftxt.write('lens'+' : '+repr(pcap_packet_header_list[i].lens)+'\n')
          #再写数据部分
          ftxt.write('此包的数据内容'+repr(packet_data[i])+'\n')
      ftxt.write('一共有'+str(packet_num)+"包数据"+'\n')
            
      ftxt.close()
      fpcap.close()
      
      '''
      def display_hex(frame): 
        hex_str='' 
        for j in frame:
          temp=ord(j) 
          temp=hex(temp) 
          if len(temp)==3: 
            temp = temp.replace('0x','0x0') 
          hex_str=hex_str+temp 
        hex_str=hex_str.replace('0x',' ') 
        return hex_str
      
        '''
    

    效果
    在这里插入图片描述xiao’gxiaoguo

    展开全文
  • 使用Scapy分析pcap数据包

    万次阅读 2016-08-02 08:28:06
    网络上首先搜到的是如下用法: ...看到 “for pktno in range(len(pkts))”,知道rdpcap是把整个数据包读入内存中。...Scapy所在目录:C:\Python27\Lib\site-packages\scapy Rdpcap函数在utils.


    网络上首先搜到的是如下用法:



    看到 “for pktno in range(len(pkts))”,知道rdpcap是把整个数据包读入内存中。我担心数据包很大的情况下,性能影响很大。

    于是继续搜,搜到了一篇这样使用的陷阱。解析如下:

    Scapy所在目录:C:\Python27\Lib\site-packages\scapy

    Rdpcap函数在utils.py文件中的定义:

    继续找PcapReader这个类。同样在utils.py这个文件中。继承自同在这个文件中定义的RawPcapReader类。

    Read_allPcapReader中的定义:


    Read_allRawPcapReader中的定义

    可见一个read_all直接把整个的pcap文件全都加载到内存当中了。

    而且这里存在一个陷阱。rdpcap其实就是一行代码——return. return时,实例化了PcapReader类,并调用了其read_all函数。不难想到——既然rdpcap的作用是读取一个pcap文件的内容,那一定会有open操作。我们必然要问一句:既然open了,那么你是在哪close的呢??



    可见,一旦实例化这个类,初始化函数就会自动的将用户指定的pcap文件打开,但用完之后,必须用户手动close掉才可以。而rdpcap这个函数只实例化了PcapReader这个类,却没有close掉,也没有将实例化的对象传递出来,用户也无法close


    因此,代码做如下优化,参照Read_allRawPcapReader中的定义,直接拿出来自己用。

    如下,就做到了一包一包的读。读完把文件关闭。


    接下来对数据进行分析

    按照网上查到的pcap格式,可以获得数据包的时间戳(符合我的应用)

    数据如何分析呢?

    尝试了下通过repr打印出数据包:




    面对这样的数据,不知道如何分析了

    于是想知道读取的数据包是什么类型的数据:

    print type(data)

    得到结果:

    <class 'scapy.layers.l2.Ether'>

    搜素其帮助:



    得到如下信息:



    按照如下信息,试着:print data.src,打印出了源mac地址

    同理,试着:print data.load,打印出了udp数据,由此就可以进行数据分析了。




    展开全文
  • python+pypcap+dpkt抓取IP数据包

    千次阅读 2018-04-12 11:50:36
    pypcap库是一款基于libpcap封装的为python语言提供接口的抓包库。 dpkt则是用来解析数据包的库。 pip install pypcap pip install dpkt 2. #coding:utf-8 import pcap import dpkt import time import math ...
  • python 读取修改pcap包

    千次阅读 2018-05-30 16:50:59
    利用scapy库,在这个库的基础下能够做很多的事情,python读取pcap包网上一找一大把 将读取出来的pcap包改一个名字,然后写回,这不就OK了吗 写回的函数是:scapy.wrpcap(‘filename’,list) 第一个参数是filename,第二...
  • 因为网络拓扑发现和操作系统识别都是通过wireshark抓取网络上的通信数据包实现的,所以想对wireshark抓取到的pcap数据包进行解析,并且进行网络特性及其具体值的提取,并将其保存成csv格式。一个下午的时间,终于让...
  • pcap文件分析-上之wireshark工具使用

    万次阅读 2016-09-20 23:41:09
    1.pcap文件格式说明 pcap文件格式是常用的数据报文... pcap文件头 + { 数据报文信息 + 数据报文 }+ 通过查看pcap.h文件,可以知道pcap文件头的具体格式(24字节): struct pcap_file_header {  bpf_
  • Python是世界上最好的语言!它使用不可见的制表键作为其语法的一部分!Vim和Emacs的区别在于,它可以帮助乌干达的儿童...不讨论哲学,不看第一印象,也没有KPI相逼,但是Python真的做到了”你不用操心语言本身,只...
  • pcap数据包解析数据特征提取

    千次阅读 2019-08-08 00:09:53
    pcap数据包解析数据特征提取 #include #include #include #include #include #pragma pack(1) #define BUFSIZE 1526 #define STRSIZE 1024 typedef int bpf_int32; typedef unsigned int bpf_u_...
  • 想试一试读取pcap文件的内容,并且分析出pcap文件头,每一包数据的pcap头,每一包的数据内容(暂时不包括数据包的协议解析),关于pcap文件的格式,可以参看:http://blog.sina.com.cn/s/blog_4b5039210100fzrt.html ...
  • python分析pcap

    2020-07-30 23:32:06
    利用Python快速分析数据包的完整性,提示数据包缺少步骤,按照源端口目的端口源ip和目的ip进行分流
  • 一个利用WinPcap抓到的数据包及解析

    千次阅读 2012-12-13 11:56:39
    抓到的数据包为: 00 22 46 06 2a 63 00 24 8c 44 74 ad 08 00 45 00 00 26 b1 cf 00 00 80 11 3d d9 0a 0b 1b 88 0a 0b 1b 81 20 2a 20 2a 00 12 79 5c 32 32 32 32 32 32 32 32 32 32 00 00 00 00 00 ...
  • Python程序之DNS劫持

    千次阅读 2019-05-30 15:10:18
    实验环境: 虚假网站端:虚拟机Windowsserver 2008 攻击机:Windows7 靶机端:Windows10 实验步骤: 设置虚拟机网络适配器为桥接模式 虚拟机设备设置 编辑虚拟网络编辑器 ...fr...
  • 解析pcap数据包

    2020-07-29 14:20:07
    解析pcap数据包,提取出其中内容,http协议,https,icmp.dns
  • 解析pcap文件并提取其中五元组

    千次阅读 2019-03-19 21:05:49
    解析pcap文件并提取其中五元组 最近在学习分析pcap文件中的数据包,其中数据包的五元组(源IP,目的IP,源端口,目的端口,协议类型,共13个字节)可以用来作为数据流的标识。我们可以将五元组提取出来,以便日后...
  • 利用scapy提取数据包的域名、url字段

    千次阅读 2019-01-29 16:58:43
    分析数据的时候,需要从pcap包中按照一定的规则,提取出对应HTTP包的域名、url信息,以供后续分析使用。 开始 最开始想到的就是用scapy来进行提取,发现实际上它不解析HTTP层的。从图中可以看到,它在TCP层之后,...
  • BugKuCTF-杂项-writeup 大全?

    万次阅读 2018-06-26 00:00:57
    最近玩了一个 CTF 的练习平台-----BugkuCTF下面会把一些题目的方法记录下来先讲一下杂项1.签到题只要关注公众号就可以得到 flag---开胃菜2.这是一张单纯的图片网站上打开是无法加载,将图片保存到本地是个小兔子,...
  • 网络流量抓取与还原系统Xplico架构

    千次阅读 2017-12-09 09:28:31
    xplico的目标在于从抓取的网络流量处还原应用中的数据。 例如:xplico可以从pcap包中还原出每一封邮件(POP,IMAP,SMTP协议),所有的http内容等等.Xplico并不是协议分析工具,而是网络取证工具。 特性
1 2 3
收藏数 54
精华内容 21
热门标签
关键字:

pacp python 解析数据