利用python-pypcap抓取帶VLAN標簽的數據包方法
1、背景介紹
在采用通常的socket抓包方式下,操作系統會自動將收到包的VLAN信息剝離,導致上層應用收到的包不會含有VLAN標簽信息。而libpcap雖然是基于socket實現抓包,但在收到數據包后,會進一步恢復出剝離的VLAN信息,能夠滿足需要抓取帶VLAN標簽信息的數據包的需求場景。
python-pypcap包是對libpcap庫的python語言封裝,本文主要介紹如果利用python-pypcap在網絡接口抓取帶VLAN標簽的數據包。
2、環(huán)境準備
libpcap-0.9.4
python-pypcap-1.15,該包依賴libpcap-0.9.4
可以通過在python交互式環(huán)境下運行import pcap,如果導入成功,說明python-pypcap-1.15已成功安裝。
3、抓包實現
pypcap包封裝了libpcap提供的許多接口函數,簡單的抓包可以采用如下幾個步驟完成:
1)Open a handle to a packetcapture descriptor.
fpcap = pcap.pcap(name=iface)
指定從iface接口抓包,此處可以添加其他相關抓包參數,大家可以參考對pcap.pcap類的說明。
2)設置過濾規(guī)則
fpcap.setfilter('inbound')
此處inbound表示抓取所有發(fā)送到該接口的包,不抓取從該接口發(fā)送出的數據包,規(guī)則的設置同tcpdump抓包設置過濾規(guī)則相同。
3)調用loop函數循環(huán)抓包
fpcap.loop(callback,None)
源文件中對loop函數的說明如下:
此處需要說明的是,在實際使用中發(fā)現提供了cnt參數后程序運行會報錯,而不加cnt參數可以成功運行,即采用fpcap.loop(callback,None)。
4)實現包處理回調函數callback
callback函數聲明如下:
這里需要說明的是,參數timestamp和pkt會由loop函數自動傳入,pkt表示數據包,但其類型是buffer類型,這里可以采用圖中的scapy.layers.l2.Ether(str(pkt))將pkt轉化為scapy的Ether類型[如果包為dot3類型的,也將自動轉化為Dot3類型的對象,此處針對isis協議]。然后再通過p.time = timestamp將時間戳信息更新到包中。后續(xù)就可以按照處理scapy的Ether類型包的方式進行進一步包處理。
4、示例
下述代碼實現了一個線程類,能夠在指定的接口iface上抓取進入該接口的包并打印包概要信息。
以上這篇利用python-pypcap抓取帶VLAN標簽的數據包方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Django框架模板語言實例小結【變量,標簽,過濾器,繼承,html轉義】
這篇文章主要介紹了Django框架模板語言,結合實例形式總結分析了Django框架中變量,標簽,過濾器,繼承,html轉義等相關模板語言操作技巧,需要的朋友可以參考下2019-05-05python實現文件+參數發(fā)送request的實例代碼
這篇文章主要介紹了python實現文件+參數發(fā)送request的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01windows7 32、64位下python爬蟲框架scrapy環(huán)境的搭建方法
這篇文章主要介紹了windows7 32、64位下python爬蟲框架scrapy環(huán)境的搭建方法,需要的朋友可以參考下2018-11-11django使用定時任務django_apscheduler的實現
定時任務無論是個人開發(fā)還是企業(yè)業(yè)務都是需要的,本文主要介紹了django使用定時任務django_apscheduler的實現,減少請求時需要用戶等待的時間,感興趣的可以了解一下2021-08-08Pycharm開發(fā)Django項目創(chuàng)建ORM模型的問題
ORM,全稱Object Relational Mapping,通過ORM我們可以通過類的方式去操作數據庫,而不用再寫原生的SQL語句,下面通過本文給大家介紹Pycharm開發(fā)Django項目ORM模型介紹,感興趣的朋友一起看看吧2021-10-10