Python如何處理網(wǎng)絡包?scapy嗅探分析

scapy 是 python 處理網(wǎng)絡包最常用且靈活的工具,適用于嗅探、分析和協(xié)議解析。其核心使用方法包括:1. 安裝 scapy 并確保以管理員權(quán)限運行;2. 使用 sniff() 函數(shù)捕獲數(shù)據(jù)包并實時或按數(shù)量處理;3. 通過 haslayer() 和 getlayer() 提取特定協(xié)議字段進行深度分析;4. 利用 Filter 參數(shù)實現(xiàn)流量過濾提升效率;5. 使用 wrpcap() 將數(shù)據(jù)包保存為 .pcap 文件以便后續(xù)分析。

Python如何處理網(wǎng)絡包?scapy嗅探分析

python 要處理網(wǎng)絡包,特別是做嗅探和分析這類底層操作,最常用也最靈活的工具之一就是 Scapy。它不僅能構(gòu)造、發(fā)送和捕獲數(shù)據(jù)包,還能解析各種協(xié)議結(jié)構(gòu),非常適合做網(wǎng)絡調(diào)試、安全測試或者學習網(wǎng)絡協(xié)議。

Python如何處理網(wǎng)絡包?scapy嗅探分析

下面我從幾個常見使用場景出發(fā),講講怎么用 Scapy 嗅探和分析網(wǎng)絡包。

Python如何處理網(wǎng)絡包?scapy嗅探分析


安裝 Scapy 和權(quán)限準備

Scapy 是一個 Python 庫,安裝方式很簡單:

立即學習Python免費學習筆記(深入)”;

pip install scapy

不過要注意的是,Scapy 需要管理員權(quán)限才能進行嗅探,也就是說你在 linux 或 macos 上要用 sudo 執(zhí)行腳本,在 windows 上則需要用管理員身份運行命令行或 ide。

Python如何處理網(wǎng)絡包?scapy嗅探分析

另外,如果你是在虛擬機或者某些云環(huán)境中,可能還需要啟用混雜模式(Promiscuous Mode)才能抓到所有流量。


簡單嗅探:捕獲基本的數(shù)據(jù)包

Scapy 提供了一個 sniff() 函數(shù),可以快速開始監(jiān)聽網(wǎng)絡接口上的數(shù)據(jù)包。

比如,想看看當前網(wǎng)卡上流過的所有流量,可以用這段代碼:

from scapy.all import sniff  packets = sniff(count=10)  # 捕獲10個包后停止 packets.summary()
  • count=10 表示只抓10個包。
  • summary() 會顯示每個包的基本信息,比如源地址、目標地址、協(xié)議類型等。

如果你想一直抓包,可以去掉 count 參數(shù):

sniff(prn=lambda x: x.summary())  # 實時打印每個包的摘要

這種方式適合快速查看網(wǎng)絡活動,但還不能做深度分析。


深度分析:提取特定協(xié)議字段

Scapy 的優(yōu)勢在于它能層層解析數(shù)據(jù)包結(jié)構(gòu)。例如,你想找出所有的 TCP 包,并查看它們的源端口和目的端口,可以這樣做:

def process_packet(packet):     if packet.haslayer('TCP'):         tcp_layer = packet.getlayer('TCP')         print(f"Source Port: {tcp_layer.sport}, Destination Port: {tcp_layer.dport}")  sniff(prn=process_packet, count=20)

這樣就能逐層訪問數(shù)據(jù)包內(nèi)容了。你也可以檢查 IP 層、udp、ICMP、DNS 等協(xié)議字段。

常見的組合判斷有:

  • packet.haslayer(‘IP’)
  • packet.haslayer(‘Ether’)
  • packet.haslayer(‘DNS’)

你可以根據(jù)這些判斷來做不同的處理邏輯,比如只記錄 DNS 請求的域名。


過濾與保存:提升效率和后續(xù)分析

有時候你只想抓某類包,比如 http 或者 DNS 流量,可以在 sniff() 中加上 filter 參數(shù):

sniff(filter="tcp port 80", prn=process_packet)

這個例子中只會捕獲 HTTP 流量(默認是 TCP 80 端口)。支持的過濾語法和 tcpdump 一樣,非常強大。

另外,你還可以把抓到的包保存成 .pcap 文件,方便用 wireshark 等工具進一步分析:

wrpcap('output.pcap', packets)

這在調(diào)試復雜問題時特別有用。


基本上就這些。Scapy 功能很多,但核心就是這幾個點:捕獲、過濾、解析、保存。剛開始用的時候可能會覺得結(jié)構(gòu)有點繞,但只要理解了分層結(jié)構(gòu),用起來就很順手了。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊6 分享