1. 程式人生 > >python應用系列教程——python使用scapy監聽網路資料包、按TCP/IP協議進行解析

python應用系列教程——python使用scapy監聽網路資料包、按TCP/IP協議進行解析

全棧工程師開發手冊 (作者:欒鵬)

python使用scapy監聽抓取網路資料包。

scapy具有模擬傳送資料包、監聽解析資料包、網際網路協議解析、資料探勘等多種用處。這裡我們只來說一下scapy監聽資料包,並按照不同的協議進行解析。

首先需要安裝scapy包,點選下載

scapy也是基於libcap的互動式網路分析工具,所以還要安裝winpcap軟體,為監控網絡卡提供介面。winpcap

scapy由於功能豐富,內容較多,所以在匯入時會比較慢。在pycharm中可以匯入,pydev中匯入卡死。

如果匯入卡死,可以把自己編寫的python程式,放在scapy庫的根目錄下。比如scapy庫在C:\Python27\Scripts\scapy-master下,則在成功安裝scapy庫以後,可以將自己的py程式放在這個資料夾下執行。

python2.7下

#coding:utf-8
#由於scapy沒有自動將庫目錄新增到python系統目錄內,所以這裡先檢視模組目錄在哪裡,再新增到系統搜尋路徑下
from scapy.all import *   #匯入scapy較慢,如果無法匯入,就將py檔案放到scapy庫,C:\Python27\Scripts\scapy-master資料夾下執行
print("sucess import")
def pack_callback(packet):
#     print packet.show()  #可以檢視包的結構屬性等
    if packet["TCP"].payload:  #檢測tcp負載是否有資料,有Ethernet、IP、TCP幾個階段
appstr=str(packet["TCP"].payload) #將tcp負載位元組陣列轉化為字串 #匹配自定義正則表示式 pat = 'Content-Type:(.*)[;\r\n]' #建立一個正則表示式,在字串中匹配這個正則表示式,這裡以Content-Type:開頭,以;或\r結尾的 pat = re.compile(pat); #使用正則表示式,建立正則物件 m = re.search(pat,appstr) #查詢是否存在匹配的子字串 if m: print(m.groups()) #列印需要()輸出的內容
# 嗅探資料包,引數:過濾器,回撥函式,網絡卡,個數 ifacestr="HUAWEI Mobile Connect - Network Card" #網口名稱,這裡要換成自己的網絡卡名稱 filterstr="tcp port 110 or tcp port 8080 or tcp port 80" #過濾條件,為空表示不限制 sniff(filter=filterstr,prn=pack_callback,iface=ifacestr,count=0) #count等0表示一直監聽,要想監聽資料包,需要首先安裝winpcap

在程式中ifacestr引數為你要監聽的網絡卡的名稱,為下圖中紅色標記部分
這裡寫圖片描述

python3.6下

還沒有安裝成功