python读取数据流_python3+pyshark读取wireshark数据包并追踪telnet数据流

本文介绍了一个使用pyshark库读取Wireshark数据包并追踪telnet数据流的Python程序。程序通过tshark过滤数据包,根据四元组([IP address A, TCP port A, IP address B, TCP port B])来确定数据流,然后读取应用层数据。程序首先使用display_filter过滤出telnet数据包,接着通过四元组匹配追踪特定流,最后打印出流中的应用层数据。" 8820587,1329554,CERTI实例:Billard模块深度解析,"['HLA', '联邦执行', '对象句柄', '数据分发', '图形渲染']
摘要由CSDN通过智能技术生成

一、程序说明

本程序有两个要点,第一个要点是读取wireshark数据包(当然也可以从网卡直接捕获改个函数就行),这个使用pyshark实现。pyshark是tshark的一个python封装,至于tshark可以认为是命令行版的wireshark,随wireshark一起安装。

第二个要点是追踪流,追踪流在wireshark中是“tcp.stream eq 70”之类的形式,但是70这类值暂是不知道具体怎么计算出来的,但从网上资料看,是依据[IP address A, TCP port A, IP address B, TCP port B]四元组计算出来的,只要这四个值一样那么计算出来的tcp.stream也就一样,就认为是同一个流。那么,反过来也就是说“tcp.stream eq 70”这种形式,其实等价于"ip.addr == ip_a and tcp.port == port_a and ip.addr == ip_b and tcp.port == port_b"的形式,我们这里就是用这种形式来追踪telnet流。

至于为什么一再强调是追踪telnet流而不是追踪流,是因为感觉各应用层协议没有统一获取应用层协议内容的方法,比如这里通过tmp_packet[highest_layer_name].get_field('data')形式读取telnet数据的,但http则得用tmp_packet['http'].file_data读取,ftp等其他协议又要通过其他不同属性来获取。

另外还要说明的一点是,数据包的每次过滤主要是借助写display_filter重新读取数据包文件,而不是将所有数据包读入后自己写代码进行过滤(就实际来看这种方法比借助写display_filter重新读取数据包文件要复杂且运行速度要慢)或者写display_filter进行二次过滤(tshark本身就不支持二次过滤,就观察来看wireshark自己也没有二次过滤这种东西在执行过滤器表达式时都是重新读取数据包文件)

运行效果如下:

二、程序源代码

importpysharkclasswireshark_analysis_script():#此函数的作用是封装一下pyshark.FileCapture

defread_packets_from_file(self,packets_file_path,tshark_path,display_filter):

packets_file_obj= pyshark.FileCapture(input_file=packets_file_path,tshark_path=tshark_path,display_filter=display_filter)returnpackets_file_obj#此函数的作用是从传送过来的所有数据包中,抽取并返回{ip_server,ip_client,port_server,port_client}四元组

defget_target_client_ip_port(self,packets_file_obj):for tmp_packet inpackets_file_obj:

ip_server=tmp_packet.ip.src

port_

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值