• 大小: 26KB
    文件类型: .rar
    金币: 2
    下载: 2 次
    发布日期: 2021-10-18
  • 语言: Python
  • 标签: python  follow  tcp  stream  

资源简介

wireshark自带的follow tcp stream提取出的stream 数据没有时间戳等其他信息,在分析数据的延时和丢包问题时就有些力不从心了。这里简单用python实现了一个简单follow tcp stream功能,同时保留了tcp信息。

资源截图

代码片段和文件信息

‘‘‘
Created on 2014-4-27

@author: lenovo
‘‘‘
from xml.etree.ElementTree import ElementTree

class PDMLParser(object):
    ‘‘‘
    classdocs
    @ 用于从wireshark生成的pdml格式的文件中提取出需要的信息。目前只是单纯用于提取tcp包
    @usage: parser.read(filepath).do_parse()
    @note: 为了减少pdml大小和提高提取的速度,生成pdml文件时,应先尽可能利用wireshark的过滤器,将不需要解析的数据包过滤掉。
    ‘‘‘
    
    def __init__(self):
        ‘‘‘
        Constructor
        ‘‘‘
   
   
    def read(self filepath=‘./pdml.xml‘):
        ‘‘‘
        @ 读取filepath指定的pdml格式的文件,解析生成一颗xml树
        @param filepath:pdml文件的路径
        @return: the parser object itself 
        ‘‘‘
        self.tree = ElementTree()
        self.tree.parse(filepath)
        return self
    
    
    def do_parse(self):
        ‘‘‘
        @ 从由pdml文件生成的xml树中解析出需要的数据包信息
        @note: 这里简单起见,提取哪些信息都是固定的。如果有需要的下,可以通过xml文件配置或者以参数方式传入。
        @return: 数据包信息,是一个list
        ‘‘‘
        frame_list = []
        for packet in self.tree.findall(“packet“):
            frame = {}    
            for proto in packet.findall(‘proto‘):
                if proto.get(‘name‘) == ‘ip‘:
                    frame.update(self.ip_info(proto))
                elif proto.get(‘name‘) == ‘tcp‘:
                    frame.update(self.tcp_info(proto))
                elif proto.get(‘name‘) == ‘frame‘:
                    frame.update(self.frame_info(proto))
                elif proto.get(‘name‘) == ‘fake-field-wrapper‘:
                    frame.update(self.data_info(proto))    
            frame_list.append(frame)
            
        del self.tree #节省内存占用    
        self.frame_list = frame_list
        return frame_list
    
                                     
    def ip_info(self ip_proto ipinfo={‘ip.src‘:‘show‘
                                      ‘ip.dst‘:‘show‘}):
        ‘‘‘
        @ 提取packet中的ip协议层的信息,
        @param ip_proto: wireshark生成的pdxml格式,其中的ip proto部分
        @param ipinfo: ipinfo是一个dictionary,key表示要提取的field的name,value表示要提取的field的属性名称
        @return: a dictionary 返回ipinfo中要查询的字段的值,其中key仍是tcpinfo中的key, value就是tcpinfo中指定的属性名称的值
            e.g. {‘tcp.srcport‘:‘456‘ ‘tcp.dstport‘:‘123‘}
        ‘‘‘
        return self.extract_element(ip_proto ipinfo)

                             
    def tcp_info(self tcp_proto tcpinfo={‘tcp.srcport‘:‘show‘ 
                                        ‘tcp.dstport‘:‘show‘ 
                                        ‘tcp.seq‘:‘show‘ 
                                        ‘tcp.nxtseq‘:‘show‘
                                        ‘tcp.ack‘:‘show‘
                                        ‘tcp.flags‘:‘show‘}):
        ‘‘‘
        @see: ip_info
        @param tcp_proto: proto of ‘tcp‘
        @return: a dictionary of tcp info such as {‘tcp.seq‘: ‘450‘ ‘tcp.srcport‘: ‘80‘ ‘tcp.nxtseq‘: ‘‘ ‘tcp.ack‘: ‘763‘ ‘tcp.dstport‘: ‘59203‘ ‘tcp.flags‘: ‘0x0010‘}
        ‘‘‘          
        return self.extract_element(tcp_proto tcpinfo)
    
               

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        380  2014-08-20 22:12  TCPParser\.project

     文件        431  2014-08-20 22:12  TCPParser\.pydevproject

     文件         13  2014-08-13 23:36  TCPParser\tcp\.gitignore

     文件       5727  2014-08-15 22:24  TCPParser\tcp\._PDMLParser.py1239257355183174924.tmp

     文件       5727  2014-08-15 22:23  TCPParser\tcp\._PDMLParser.py2410884988135934317.tmp

     文件       5727  2014-08-15 22:23  TCPParser\tcp\._PDMLParser.py3258138073824387452.tmp

     文件       5727  2014-08-15 22:23  TCPParser\tcp\._PDMLParser.py4594915663318073934.tmp

     文件     115272  2014-08-11 23:07  TCPParser\tcp\pdml.xml

     文件       5526  2014-08-20 22:14  TCPParser\tcp\PDMLParser.py

     文件      13926  2014-08-20 22:14  TCPParser\tcp\PDMLParserTest.py

     文件       1900  2014-08-20 22:23  TCPParser\tcp\RTTParser.py

     文件       1450  2014-08-20 22:24  TCPParser\tcp\RTTParserTest.py

     文件       1724  2014-08-20 22:16  TCPParser\tcp\TCPframe.py

     文件       7260  2014-08-20 22:23  TCPParser\tcp\TCPParser.py

     文件       2831  2014-08-20 22:23  TCPParser\tcp\TCPParserTest.py

     文件        749  2014-08-18 20:58  TCPParser\tcp\TCPProtocolAnalizer.py

     文件          0  2014-08-10 20:11  TCPParser\tcp\__init__.py

     目录          0  2014-08-20 22:24  TCPParser\tcp

     目录          0  2014-08-20 22:13  TCPParser

----------- ---------  ---------- -----  ----

               174370                    19


评论

共有 条评论