Python 黑帽編程 4.2 Sniffer 之數據本地存儲和加載

在上一節,咱們完成了編寫一個簡易的Sniffer的第一步——數據捕獲。
不少時候,咱們須要將捕獲的數據先保存到磁盤上,以後再使用工具或者本身編寫代碼來進行詳細分析。
本節咱們在上一節的基礎上來說解保存捕獲數據的方式,固然使用tcpdump或者WireShark均可以
很方便的存儲數據包。python

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文件,以後就能夠
循環處理每個數據包了。運行結果以下:app

4.2.2 使用Scapy保存和讀取數據

上一節咱們講了Scapy的基礎用法,Scapy支持將捕獲的數據保存成多種數據格式,好比hex,base64等,
利用Scapy來保存捕獲的數據到pcap文件,有兩種方式,第一種爲使用PcapWriter模塊,例如:tcp

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參數。例如:oop

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

讀取pcap文件能夠使用scapy.all 模塊中的rdpcap方法。例如:spa

from scapy.all import *

packets = rdpcap('ssss.pcap')
for packet in packets:
    print packet複製代碼

如上,rdpcap方法接收一個文件路徑參數,返回全部的數據包。運行結果以下:3d

4.2.3 小結

讀取和保存數據的方法不少,這裏結合本教程實例,只介紹這兩種較爲簡單的方法。


查看更多Python黑客編程及安全類文章,請關注玄魂工做室微信訂閱號(xuanhun521)。

相關文章
相關標籤/搜索