在上一節,咱們完成了編寫一個簡易的Sniffer的第一步——數據捕獲。
不少時候,咱們須要將捕獲的數據先保存到磁盤上,以後再使用工具或者本身編寫代碼來進行詳細分析。
本節咱們在上一節的基礎上來說解保存捕獲數據的方式,固然使用tcpdump或者WireShark均可以
很方便的存儲數據包。python
前文咱們使用 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
上一節咱們講了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
讀取和保存數據的方法不少,這裏結合本教程實例,只介紹這兩種較爲簡單的方法。
查看更多Python黑客編程及安全類文章,請關注玄魂工做室微信訂閱號(xuanhun521)。