资源简介
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.xm
文件 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\TCPfr
文件 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
- 上一篇:网格图的demo与详细解析Python实现
- 下一篇:短路计算程序_python3
相关资源
- Instant Pygame for Python Game Development How
- Biopython Tutorial
- Think Python 2nd
- 一个小小的表白程序(python)
- Python课堂笔记(高淇400集第一季)
- 二级考试python试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
评论
共有 条评论