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