資源簡介
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
評論
共有 條評論