zoukankan      html  css  js  c++  java
  • Python 黑帽编程 4.2 Sniffer之数据本地存储和加载

    在上一节,我们完成了编写一个简易的Sniffer的第一步——数据捕获。
    很多时候,我们需要将捕获的数据先保存到磁盘上,之后再使用工具或者自己编写代码来进行详细分析。
    本节我们在上一节的基础上来讲解保存捕获数据的方式,当然使用tcpdump或者WireShark都可以
    很方便的存储数据包。

    4.2.1 使用pcapy保存和读取数据

    前文我们使用 pcapy的open_live方法,可以获取pcapy的一个实例对象,通过该对象的dump_open
    方法可以获取一个dump对象,通过dump对象可以保存数据包到本地磁盘。示例如下:

    #!/usr/bin/python
    
    import pcapy
    
    dev = "eth0"
    filter = "tcp and port 80"
    
    def save_packet(hdr, data):
        dumper.dump(hdr, data)
    
    pcap = pcapy.open_live(dev, 1500, 0, 100)
    dumper = pcap.dump_open('sniffer.pcap')
    pcap.setfilter(filter)
    pcap.loop(0, save_packet)
    

    上面的代码中,我们首先通过dump_open方法获取dumper对象,随后在循环捕获数据的时候
    调用save_packet方法,该方法中调用dump方法将数据保存到本地。运行结果如下:

    下面我们看看如何从磁盘读取pcap文件。

    #!/usr/bin/python
    
    import pcapy
    
    dev = "eth0"
    filter = "tcp and port 80"
    
    def read_packet(hdr, data):
        print data
    
    pcap = pcapy.open_offline('sniffer.pcap')
    pcap.loop(0, read_packet)
    

    在上面的带码中,我们使用pcapy的open_offline方法从本地打开一个pcap文件,之后就可以
    循环处理每一个数据包了。运行结果如下:

    4.2.2 使用Scapy保存和读取数据

    上一节我们讲了Scapy的基础用法,Scapy支持将捕获的数据保存成多种数据格式,比如hex,base64等,
    利用Scapy来保存捕获的数据到pcap文件,有两种方式,第一种为使用PcapWriter模块,例如:

    from scapy.all import *
    from scapy.utils import PcapWriter
    
    
    def packetHandler(pkt):
        pktdump.write(pkt)
    
    pktdump = PcapWriter("ssss.pcap", append=True, sync=True)
    sniff(filter='tcp and port 80',prn=packetHandler,iface='eth0')
    

    初始化PcapWriter对象需要传入三个参数,要保存的文件名、是否追加数据,是否同步顺序添加。
    之后在packetHandler方法中,调用write方法将数据包写入文件。运行结果如下:

    另外一种方式为配置sniff方法的offline参数。例如:

    sniff(filter='tcp and port 80',iface='eth0',offline="temp.cap")
    

    读取pcap文件可以使用scapy.all 模块中的rdpcap方法。例如:

    from scapy.all import *
    
    packets = rdpcap('ssss.pcap')
    for packet in packets:
        print packet
    

    如上,rdpcap方法接收一个文件路径参数,返回所有的数据包。运行结果如下:

    4.2.3 小结

    读取和保存数据的方法很多,这里结合本教程实例,只介绍这两种较为简单的方法。


    查看更多Python黑客编程及安全类文章,请关注玄魂工作室微信订阅号(xuanhun521)。

  • 相关阅读:
    Luogu P1020 导弹拦截
    MySQL事务隔离级别和实现原理
    classloader加载class文件的原理和机制
    Spring Bean的生命周期只有这四个阶段
    Spring 源码:BeanFactory 简介以及它 和FactoryBean的区别
    开闭原则——面向对象设计原则
    HashSet的实现原理
    装饰器模式(装饰设计模式)详解
    在java中,HashMap 或者HashTable,它们的键值被放满了,会出现什么情况?
    Mybitis 批量插入实践
  • 原文地址:https://www.cnblogs.com/xuanhun/p/6383083.html
Copyright © 2011-2022 走看看