最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3使用libpcap庫進(jìn)行抓包及數(shù)據(jù)處理的操作方法

 更新時(shí)間:2022年10月30日 10:24:28   作者:Mike_Zhang  
這篇文章主要介紹了python3使用libpcap庫進(jìn)行抓包及數(shù)據(jù)處理,需要的朋友可以參考下

python版本:python 3.9

libpcap版本:1.11.0b7

python libpcap庫是底層綁定c語言libpcap庫的開發(fā)包,旨在提供python應(yīng)用可訪問的unix c libpcap庫API(以及為win32系統(tǒng)提供的Npcap、WinPcap),直接使用底層c代碼,性能很好。

這里記錄下Windows 10 環(huán)境下python3.9如何安裝及使用libpcap庫(Linux和mac系統(tǒng)可參考Windows)。

pypi地址:https://pypi.org/project/libpcap/

github 地址:https://github.com/karpierz/libpcap

一、安裝libpcap庫

1、在線安裝

直接使用pip進(jìn)行安裝:

pip install libpcap

默認(rèn)安裝最新版本。

2、離線安裝

2.1 下載離線安裝文件

可以在pypi頁面源代碼或whl文件。

2.2 執(zhí)行離線安裝操作

1) 可以使用源碼進(jìn)行安裝

解壓文件到當(dāng)前目錄,然后執(zhí)行安裝命令:

python -m pip install ./libpcap-1.11.0b7

2)也可以使用whl文件進(jìn)行離線安裝

安裝命令如下:

python -m pip install libpcap-1.11.0b7-py3-none-any.whl

二、使用libpcap庫

1、導(dǎo)入及指定pcap庫

import libpcap
libpcap.config(LIBPCAP="wpcap")

2、常用API介紹

tcpdump就是以libpcap為基礎(chǔ)實(shí)現(xiàn)的,c語言libpcap的文檔可以在tcpdump官網(wǎng)找的:

https://www.tcpdump.org/manpages/pcap.3pcap.html

這里描述下python常用接口。

2.1 獲取網(wǎng)絡(luò)設(shè)備接口

  • lookupdev(errbuf)

功能:該函數(shù)用于查找網(wǎng)絡(luò)設(shè)備,返回的值可以被open_live函數(shù)直接調(diào)用。

參數(shù):

errbuf為c語言字符串類型,用于獲取錯(cuò)誤信息。

使用示例:

import ctypes as ct
import libpcap as pcap
errbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1)
device = pcap.lookupdev(errbuf)
print(errbuf.value)
  • findalldevs(alldevs, errbuf)

功能:該函數(shù)用于查找所有網(wǎng)絡(luò)設(shè)備。

參數(shù):

alldevs為pcap_if_t結(jié)構(gòu)體指針,用于存儲查找到的所有網(wǎng)絡(luò)設(shè)備信息。

errbuf為c語言字符串類型,用于獲取錯(cuò)誤信息。

使用示例:

import ctypes as ct
import libpcap as pcap
errbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1)
alldevs = ct.POINTER(pcap.pcap_if_t)()    
pcap.findalldevs(ct.byref(alldevs), errbuf)
print(alldevs[0].name)
pcap.freealldevs(alldevs)

2.2 抓包接口

  • open_live(device:bytes,snaplen:int,promisc:int,to_ms:int,errbuf)

功能:該函數(shù)用于打開一個(gè)用于捕獲數(shù)據(jù)的網(wǎng)絡(luò)設(shè)備

參數(shù):

device為網(wǎng)絡(luò)接口的名字,可通過api獲取,也可以人為指定,如:"eth0"

snaplen是捕獲數(shù)據(jù)包的長度,不能大于65535

promise用于標(biāo)記是否開啟混雜模式,1代表混雜模式,其它值代表非混雜模式

to_ms代表需要等待的毫秒數(shù),超過這個(gè)時(shí)間后,獲得數(shù)據(jù)包的函數(shù)會立即返回,0表示一直等待直到有數(shù)據(jù)包到來

errbuf為c語言字符串類型,用于獲取錯(cuò)誤信息。

返回值:返回pcap_t類型指針,后面的所有操作都要使用這個(gè)指針。

使用示例:

import ctypes as ct
import libpcap as pcap
device = b'eth0' # linux 
errbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1)
handle = pcap.open_live(device,4096,1,1000,errbuf)
if errbuf.value:
    print("hanle error :",errbuf.value)
  • open_offline(fname:bytes,errbuf)

功能:該函數(shù)用于打開離線抓包文件

參數(shù):

fname為文件名稱,比如:b"/tmp/test1.cap"

errbuf為c語言字符串類型,用于獲取錯(cuò)誤信息。

返回值:返回pcap_t類型指針,后面的所有操作都要使用這個(gè)指針。

使用示例:

import ctypes as ct
import libpcap as pcap
errbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1)
handle = pcap.open_offline(fname,errbuf)
if errbuf.value:
    print("hanle error :",errbuf.value)

2.3 數(shù)據(jù)包獲取接口

  • next(handle,pheader)

功能:該函數(shù)用于獲取數(shù)據(jù)包,一次只獲取一個(gè)包。

參數(shù):

handle為pcap_t類型指針

pheader為pcap_pkthdr結(jié)構(gòu)體指針,可通過pkthdr函數(shù)創(chuàng)建

返回值:返回u_char類型指針,代表包數(shù)據(jù),可使用struct.unpack函數(shù)解析

使用示例:

import libpcap as pcap
pheader = pcap.pkthdr()
packet = pcap.next(handle,pheader)

2.4 寫文件接口

  • dump_open(handle,fname:bytes)

功能:該函數(shù)用于打開文件,存儲獲取到的數(shù)據(jù)包。

參數(shù):

handle為pcap_t類型指針

fname為文件名稱

返回值:返回pcap_dumper_t 類型指針,后面的所有操作都要使用這個(gè)指針。

使用示例:

import libpcap as pcap

fname = b"realtime1.cap"
fPcap = pcap.dump_open(handle,fname)
  • dump(handle,pheader,packet)

功能:該函數(shù)用于存儲獲取到的數(shù)據(jù)包。

參數(shù):

handle為pcap_dumper_t類型指針

pheader為pcap_pkthdr結(jié)構(gòu)體指針

packet是數(shù)據(jù)包

返回值:無返回值

使用示例:

fPcapUbyte = ct.cast(fPcap,ct.POINTER(ct.c_ubyte))
pcap.dump(fPcapUbyte,pheader,packet)
  • dump_flush(handle)

功能:該函數(shù)用于將緩存的數(shù)據(jù)刷到磁盤

參數(shù):

handle為pcap_dumper_t類型指針

返回值:錯(cuò)誤碼,0代表成功,-1代表出錯(cuò)

2.5 資源釋放接口

  • close(handle)

功能:釋放pcap_t類型指針

參數(shù):

handle為pcap_t類型指針

返回值:無返回值

  • dump_close(handle)

功能:釋放pcap_dumper_t類型指針

參數(shù):

handle為pcap_dumper_t類型指針

返回值:無返回值

3、典型使用場景

3.1、網(wǎng)卡實(shí)時(shí)抓包

可以使用libpcap庫進(jìn)行網(wǎng)卡實(shí)時(shí)數(shù)據(jù)抓包,這里進(jìn)行簡單的示例:

1)首先需要獲取或指定抓包設(shè)備

方法1 :指定網(wǎng)卡接口名稱

device = b'\Device\NPF_{BFDBF91E-9848-417D-B8AB-D3ED19990717}' # windows

device = b'eth0' # linux

Windows網(wǎng)卡接口名稱可在wireshark的捕獲界面看到,具體如下:

linux網(wǎng)卡名稱獲?。篿fconfig

方法2 :使用lookupdev獲取網(wǎng)卡接口名稱

device = pcap.lookupdev(errbuf)

方法3 :使用findalldevs獲取網(wǎng)卡接口名稱

alldevs = ct.POINTER(pcap.pcap_if_t)()

pcap.findalldevs(ct.byref(alldevs), errbuf)

device =alldevs[0].name

2)使用open_live函數(shù)進(jìn)行網(wǎng)卡抓包;

3)使用pkthdr函數(shù)創(chuàng)建header,獲取包頭信息(時(shí)間戳、包大?。?/p>

4)使用next函數(shù)循環(huán)讀取數(shù)據(jù)包,需要注意的是,獲取的packet對象的contents是C語言類型,需要使用它c(diǎn)types的pointer函數(shù)進(jìn)行轉(zhuǎn)換;

5)數(shù)據(jù)包(比如IP頭)的解析可使用struct的unpack函數(shù);

6)如果要將抓包數(shù)據(jù)存盤,可使用dump_open、dump、dump_flush系列函數(shù)進(jìn)行操作,需要注意的是,dump_open函數(shù)的第二個(gè)參數(shù)必須是byte類型;

示例代碼及運(yùn)行效果:

    完整代碼獲取途徑:

    關(guān)注微信公眾號(聊聊博文,文末可掃碼)后回復(fù)202210290101獲取。

    3.2、離線數(shù)據(jù)解析

    可以使用libpcap庫進(jìn)行離線抓包文件的解析,這里進(jìn)行簡單的示例:

    1)首先需要使用open_offline函數(shù)打開pcap文件,需要注意的是,函數(shù)的第一個(gè)參數(shù)必須是byte類型;

    2)使用pkthdr函數(shù)創(chuàng)建header,獲取包頭信息(時(shí)間戳、包大?。?;

    3)使用next函數(shù)循環(huán)讀取數(shù)據(jù)包,需要注意的是,獲取的packet對象的contents是C語言類型,需要使用它c(diǎn)types的pointer函數(shù)進(jìn)行轉(zhuǎn)換?;

    4)數(shù)據(jù)包(比如IP頭)的解析可使用struct的unpack函數(shù)?;

    示例代碼及運(yùn)行效果:

      完整代碼獲取途徑:

      關(guān)注微信公眾號(聊聊博文,文末可掃碼)后回復(fù)202210290102獲取。

      3.3、使用過濾條件抓包

      網(wǎng)卡實(shí)時(shí)抓包和離線數(shù)據(jù)解析時(shí),可以設(shè)置過濾條件,避免數(shù)據(jù)量過大。

      過濾條件示例:

      1) 過濾IP

      • host 過濾某個(gè)ip的所有包

      host 8.8.8.8

      • src 過濾源ip

      src 8.8.8.8

      • dst過濾目的ip

      dst 8.8.8.8

      2)過濾端口

      • port進(jìn)行單個(gè)端口過濾

      port 22

      • portange進(jìn)行多個(gè)端口過濾

      portange 1-1024

      • 可使用src或dst指定端口方向

      src port 22

      dst port 22

      3)指定協(xié)議

      tcp

      udp

      icmp

      4)使用組合條件

      • and 進(jìn)行與邏輯

      src localhost and dst port 22

      src localhost && dst port 22

      • or 進(jìn)行或邏輯

      port 80 or 22

      port 80 || 22

      示例代碼及運(yùn)行效果:

      三、資源下載

      本文涉及l(fā)ibpcap源代碼及whl文件,可從百度網(wǎng)盤獲?。?/p>

      鏈接: https://pan.baidu.com/s/1u6MtBVUa2aM-C-Xq-EGU3Q?pwd=pwrq

      提取碼: pwrq 

      到此這篇關(guān)于python3使用libpcap庫進(jìn)行抓包及數(shù)據(jù)處理的操作方法的文章就介紹到這了,更多相關(guān)python libpcap庫抓包數(shù)據(jù)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

      相關(guān)文章

      • python安裝以及IDE的配置教程

        python安裝以及IDE的配置教程

        Python在Linux、windows、Mac os等操作系統(tǒng)下都有相應(yīng)的版本,不管在什么操作系統(tǒng)下,它都能夠正常工作。除非使用平臺相關(guān)功能,或特定平臺的程序庫,否則可以跨平臺使用。今天我們主要來探討下windows系統(tǒng)下的安裝與配置
        2015-04-04
      • python實(shí)現(xiàn)對變位詞的判斷方法

        python實(shí)現(xiàn)對變位詞的判斷方法

        這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)對變位詞的判斷方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
        2020-04-04
      • 使用Python實(shí)現(xiàn)解析HTML的方法總結(jié)

        使用Python實(shí)現(xiàn)解析HTML的方法總結(jié)

        HTML(Hypertext Markup Language)是互聯(lián)網(wǎng)世界中的通用語言,用于構(gòu)建網(wǎng)頁,本文主要為大家介紹了如何使用Python解析HTML,包括各種方法和示例代碼,希望對大家有所幫助
        2023-11-11
      • python實(shí)現(xiàn)柵欄加解密 支持密鑰加密

        python實(shí)現(xiàn)柵欄加解密 支持密鑰加密

        這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)柵欄加解密,支持密鑰加密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
        2019-03-03
      • Python?async+request與async+aiohttp實(shí)現(xiàn)異步網(wǎng)絡(luò)請求探索

        Python?async+request與async+aiohttp實(shí)現(xiàn)異步網(wǎng)絡(luò)請求探索

        這篇文章主要介紹了Python?async+request與async+aiohttp實(shí)現(xiàn)異步網(wǎng)絡(luò)請求探索,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
        2022-10-10
      • Python 如何操作 SQLite 數(shù)據(jù)庫

        Python 如何操作 SQLite 數(shù)據(jù)庫

        這篇文章主要介紹了Python 如何操作 SQLite 數(shù)據(jù)庫,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
        2020-08-08
      • 刪除目錄下相同文件的python代碼(逐級優(yōu)化)

        刪除目錄下相同文件的python代碼(逐級優(yōu)化)

        讓我們來分析一下這個(gè)問題:首先,文件個(gè)數(shù)非常多,手工查找是不現(xiàn)實(shí)的,再說,單憑我們?nèi)庋?,在幾千張圖片里面找到完全相同的難度也是很大的
        2012-05-05
      • matplotlib繪制多子圖共享鼠標(biāo)光標(biāo)的方法示例

        matplotlib繪制多子圖共享鼠標(biāo)光標(biāo)的方法示例

        這篇文章主要介紹了matplotlib繪制多子圖共享鼠標(biāo)光標(biāo)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
        2021-01-01
      • 手把手教你在Pycharm中新建虛擬環(huán)境并使用(超詳細(xì)!)

        手把手教你在Pycharm中新建虛擬環(huán)境并使用(超詳細(xì)!)

        使用python開發(fā)項(xiàng)目通常都會創(chuàng)建一個(gè)虛擬環(huán)境,將項(xiàng)目依賴包安裝到虛擬環(huán)境中,避免一臺電腦上開發(fā)多個(gè)項(xiàng)目時(shí)依賴包版本號不兼容造成沖突,下面這篇文章主要給大家介紹了關(guān)于如何在Pycharm中新建虛擬環(huán)境并使用的相關(guān)資料,需要的朋友可以參考下
        2022-06-06
      • 如何使用python記錄室友的抖音在線時(shí)間

        如何使用python記錄室友的抖音在線時(shí)間

        這篇文章主要介紹了如何使用python記錄室友的抖音在線時(shí)間,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
        2020-06-06

      最新評論

      永州市| 淮南市| 洛南县| 广安市| 丹寨县| 涟水县| 绥滨县| 高碑店市| 东明县| 广饶县| 惠东县| 平阴县| 星座| 威信县| 阳新县| 肥东县| 治县。| 永春县| 皮山县| 大足县| 无为县| 芷江| 江安县| 乌拉特前旗| 涟水县| 白玉县| 阳曲县| 缙云县| 祁东县| 离岛区| 大同市| 江都市| 上高县| 汉川市| 屏山县| 米脂县| 桃园市| 满洲里市| 图片| 怀仁县| 汾西县|