资讯专栏INFORMATION COLUMN

PyShark入门(2):FileCapture和LiveCapture模块

joyqi / 2835人阅读

摘要:中进行数据包分析的两个典型方法是使用和模块。仅用于在嗅探时使用的过滤条件。仅用于保存的捕获文件的路径格式。用于在读取较大的捕获时节省内存。类似于使用或者进行嗅探,过滤器可以用于确定进入到返回的对象中的流量。

原文地址:http://zodiacg.net/2016/07/in...

本系列文章译自thePacketGeek的系列文章。原创翻译,转载请注明出处。

PyShark中进行数据包分析的两个典型方法是使用 FileCaptureLiveCapture 模块。
前者从一个存储的捕获文件中导入u数据包,后者将使用本机的网络接口进行嗅探。
使用这两个模块都会返回一个 capture 对象。之后的文章中会详细介绍。
我们首先来了解一下这两个模块如何使用。

两个模块提供相似的参数来控制 capture 对象中返回的数据包。下面的定义直接从模块的docstring中获取:

__interface__: [仅用于LiveCapture] 进行嗅探的网络接口。如果没有给出,使用可用的第一个接口。

__bpf_filter__: [仅用于LiveCapture] 在嗅探时使用的BPF(tcpdump)过滤条件。

__input_file__: [仅用于FileCapture] 保存的捕获文件的路径(PCAP, PCAPNG格式)。

__keep_packets__: 设定在调用next()函数之后是否保留之前读取的数据包。用于在读取较大的捕获时节省内存。

__display_filter__: 设定在读取捕获时使用的display过滤条件(即Wireshark过滤器)。

__only_summaries__: 仅产生数据包摘要,比正常读取速度快的多,但包含信息很少。

__decryption_key__: 可选的用于加密解密捕获的流量的密钥。

__encryption_type__: 捕获的数据流量所使用的加密标准(必须是WEP,WPA-PWD或WPA-PWK中之一,默认是WPA-PWK)。

only_summaries选项

使用 only_summaries 后,返回的 capture 对象中的数据包将只包含摘要信息,类似于tshark的默认输出:

>>> cap = pyshark.FileCapture("test.pcap", only_summaries=True)
>>> print cap[0]
2 0.512323 0.512323 fe80::f141:48a9:9a2c:73e5 ff02::c SSDP 208 M-SEARCH * HTTP/

使用这个选项,读取捕获文件将变得很快,但每个数据包将只包含下面的这些属性。如果你想获取嗅探中的IP地址来构建会话列表,或者使用时间和包长度来计算带宽的统计数据,那么这些信息也足够了。

>>> pkt.     #(tab auto-complete)
pkt.delta         pkt.info          pkt.no            pkt.stream        pkt.window
pkt.destination   pkt.ip id         pkt.protocol      pkt.summary_line
pkt.host          pkt.length        pkt.source        pkt.time
keep_packets选项

PyShark只会在要对数据包进行处理的时候才会将其读入内存。在你处理数据包的过程中,PyShark会将每个数据包添加到 capture 对象中叫 _packet 的列表属性的末尾。当处理大量的数据包时,这个列表将占用大量的内存,因此PyShark提供了这个选项使得内存中一次仅保留一个数据包。如果 keep_packets 设置为False(默认为True),PyShark在读取新数据包时会将上一个从内存中清除。我发现这样能提升一点数据包遍历处理的速度,提升一点也是好的!

display_filter和bpf_filter

这些过滤器有助于使你的应用集中精力于你想要分析的内容上。类似于使用Wireshark或者tshark进行嗅探,BPF过滤器可以用于确定进入到返回的 capture 对象中的流量。
BPF过滤器的灵活性不如Wireshark的display过滤器,但是你仍可以创造性的使用这些有限的关键字和偏移过滤器。
如果需要对使用BPF过滤器更详细的说明,参考Wireshark的官方文档。
下面是一个使用BPF过滤器嗅探目标HTTP流量的例子:

>>> cap = pyshark.LiveCapture(interface="en0", bpf_filter="ip and tcp port 80")
>>> cap.sniff(timeout=5)
>>> cap
   
>>> print cap[5].highest_layer
HTTP

在读取保存的捕获文件时,你可以通过设置 display_filter 选项,利用Wireshark强大的解析器来限制返回的数据包。
下面是没有使用过滤器的情况下,我的test.pcap文件中的前几个数据包:

>>> cap = pyshark.FileCapture("test.pcap")
>>> for pkt in cap:
...:    print pkt.highest_layer
...:
HTTP
HTTP
HTTP
TCP
HTTP
... (truncated)

使用了display过滤器来限制只显示DNS数据流量:

>>> cap = pyshark.FileCapture("test.pcap", display_filter="dns")
>>> for pkt in cap:
...:    print pkt.highest_layer
...:
DNS
DNS
DNS
DNS
DNS
... (truncated)
针对LiveCapture的附加说明

在遍历 LiveCapture 返回的 capture 对象时我发现了一个奇怪的现象。似乎当你试图遍历数据包列表时,它会从头开始进行嗅探,然后实时的进行遍历(来一个数据包就进行一次遍历)。我目前没有发现能够存储下数据包的方法, LiveCapture 仅能用于实时处理数据包。


上一篇:PyShark入门(1):简介
下一篇:PyShark入门(3):capture对象

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38069.html

相关文章

  • PyShark入门(3):capture对象

    摘要:,和属性是之前传递给或者的值。方法使得对象可以通过循环进行遍历。方法是另一种遍历数据包的方式,它接受一个函数作为参数并将之作用于所有的数据包。下面的脚本会将所有的数据包加入到一个列表中并打印总数上一篇入门和模块下一篇入门对象 原文链接:http://zodiacg.net/2016/07/in... 本系列文章译自thePacketGeek的系列文章。原创翻译,转载请注明出处。 我们已...

    Youngdze 评论0 收藏0
  • PyShark入门(1):简介

    摘要:如主页文档中展示的打开存储的捕获文件从网络接口上进行捕获使用或者方法建立对象后,在捕获和数据包层面就会有多个方法和属性可用。的强大在于可以调用内建的所有数据包解码器。后续文章中会说明需要那些措施来保留内存。下一篇入门和模块 原文地址:http://zodiacg.net/2016/07/in... 本系列文章译自thePacketGeek的系列文章。原创翻译,转载请注明出处。 文章作者...

    includecmath 评论0 收藏0
  • PyShark入门(4):packet对象

    摘要:以字节表示的数据包长度。当前数据包到达时间与第一个数据包的差值。的窗口大小仅用于数据包。如果你对的应用实例感兴趣,你可以看看我的项目上一篇入门对象 原文链接:http://zodiacg.net/2016/07/in... 本系列文章译自thePacketGeek的系列文章。原创翻译,转载请注明出处。 目前在这一系列文章中我们已经了解了如何捕获数据包和使用 capture 对象,我们终...

    cooxer 评论0 收藏0
  • 构建基于Spark的推荐引擎(Python)

    摘要:协同过滤提出了一种支持不完整评分矩阵的矩阵分解方法不用对评分矩阵进行估值填充。使用的是交叉最小二乘法来最优化损失函数。 构建基于Spark的推荐引擎(Python) 推荐引擎背后的想法是预测人们可能喜好的物品并通过探寻物品之间的联系来辅助这个过程 在学习Spark机器学习这本书时,书上用scala完成,自己不熟悉遂用pyshark完成,更深入的理解了spark对协同过滤的实现 在这里我...

    nanfeiyan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<