python應用系列教程——python使用scapy監聽網路資料包、按TCP/IP協議進行解析
阿新 • • 發佈:2019-01-05
全棧工程師開發手冊 (作者:欒鵬)
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下
還沒有安裝成功