91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python3怎么使用libpcap庫抓包及處理數據

發布時間:2023-01-12 10:20:19 來源:億速云 閱讀:152 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“python3怎么使用libpcap庫抓包及處理數據”,內容詳細,步驟清晰,細節處理妥當,希望這篇“python3怎么使用libpcap庫抓包及處理數據”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    python版本:python 3.9

    libpcap版本:1.11.0b7

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

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

    python3怎么使用libpcap庫抓包及處理數據

    python3怎么使用libpcap庫抓包及處理數據

    一、安裝libpcap庫

    1、在線安裝

    直接使用pip進行安裝:

    pip install libpcap

    默認安裝最新版本。

    python3怎么使用libpcap庫抓包及處理數據

    2、離線安裝

    2.1 下載離線安裝文件

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

    python3怎么使用libpcap庫抓包及處理數據

    2.2 執行離線安裝操作

    1) 可以使用源碼進行安裝

    解壓文件到當前目錄,然后執行安裝命令:

    python -m pip install ./libpcap-1.11.0b7

    python3怎么使用libpcap庫抓包及處理數據

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

    安裝命令如下:

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

    python3怎么使用libpcap庫抓包及處理數據

    二、使用libpcap庫

    1、導入及指定pcap庫

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

    2、常用API介紹

    tcpdump就是以libpcap為基礎實現的,c語言libpcap的文檔可以在tcpdump官網找:

    python3怎么使用libpcap庫抓包及處理數據

    這里描述下python常用接口。

    2.1 獲取網絡設備接口
    • lookupdev(errbuf)

    功能:該函數用于查找網絡設備,返回的值可以被open_live函數直接調用。

    參數:

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

    使用示例:

    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)

    功能:該函數用于查找所有網絡設備。

    參數:

    alldevs為pcap_if_t結構體指針,用于存儲查找到的所有網絡設備信息。

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

    使用示例:

    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)

    功能:該函數用于打開一個用于捕獲數據的網絡設備

    參數:

    device為網絡接口的名字,可通過api獲取,也可以人為指定,如:"eth0"

    snaplen是捕獲數據包的長度,不能大于65535

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

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

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

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

    使用示例:

    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)

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

    參數:

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

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

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

    使用示例:

    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 數據包獲取接口
    • next(handle,pheader)

    功能:該函數用于獲取數據包,一次只獲取一個包。

    參數:

    handle為pcap_t類型指針

    pheader為pcap_pkthdr結構體指針,可通過pkthdr函數創建

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

    使用示例:

    import libpcap as pcap
    pheader = pcap.pkthdr()
    packet = pcap.next(handle,pheader)
    2.4 寫文件接口
    • dump_open(handle,fname:bytes)

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

    參數:

    handle為pcap_t類型指針

    fname為文件名稱

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

    使用示例:

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

    功能:該函數用于存儲獲取到的數據包。

    參數:

    handle為pcap_dumper_t類型指針

    pheader為pcap_pkthdr結構體指針

    packet是數據包

    返回值:無返回值

    使用示例:

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

    功能:該函數用于將緩存的數據刷到磁盤

    參數:

    handle為pcap_dumper_t類型指針

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

    2.5 資源釋放接口
    • close(handle)

    功能:釋放pcap_t類型指針

    參數:

    handle為pcap_t類型指針

    返回值:無返回值

    • dump_close(handle)

    功能:釋放pcap_dumper_t類型指針

    參數:

    handle為pcap_dumper_t類型指針

    返回值:無返回值

    3、典型使用場景

    3.1、網卡實時抓包

    可以使用libpcap庫進行網卡實時數據抓包,這里進行簡單的示例:

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

    方法1 :指定網卡接口名稱

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

    device = b'eth0' # linux

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

    python3怎么使用libpcap庫抓包及處理數據

    linux網卡名稱獲取:ifconfig

    方法2 :使用lookupdev獲取網卡接口名稱

    device = pcap.lookupdev(errbuf)

    方法3 :使用findalldevs獲取網卡接口名稱

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

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

    device =alldevs[0].name

    2)使用open_live函數進行網卡抓包;

    3)使用pkthdr函數創建header,獲取包頭信息(時間戳、包大小);

    4)使用next函數循環讀取數據包,需要注意的是,獲取的packet對象的contents是C語言類型,需要使用它ctypes的pointer函數進行轉換;

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

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

    示例代碼及運行效果:

    python3怎么使用libpcap庫抓包及處理數據

      3.2、離線數據解析

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

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

      2)使用pkthdr函數創建header,獲取包頭信息(時間戳、包大小);

      3)使用next函數循環讀取數據包,需要注意的是,獲取的packet對象的contents是C語言類型,需要使用它ctypes的pointer函數進行轉換;

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

      示例代碼及運行效果:

      python3怎么使用libpcap庫抓包及處理數據

        3.3、使用過濾條件抓包

        網卡實時抓包和離線數據解析時,可以設置過濾條件,避免數據量過大。

        過濾條件示例:

        1) 過濾IP

        • host 過濾某個ip的所有包

        host 8.8.8.8

        • src 過濾源ip

        src 8.8.8.8

        • dst過濾目的ip

        dst 8.8.8.8

        2)過濾端口

        • port進行單個端口過濾

        port 22

        • portange進行多個端口過濾

        portange 1-1024

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

        src port 22

        dst port 22

        3)指定協議

        tcp

        udp

        icmp

        4)使用組合條件

        • and 進行與邏輯

        src localhost and dst port 22

        src localhost && dst port 22

        • or 進行或邏輯

        port 80 or 22

        port 80 || 22

        示例代碼及運行效果:

        python3怎么使用libpcap庫抓包及處理數據

        讀到這里,這篇“python3怎么使用libpcap庫抓包及處理數據”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

        向AI問一下細節

        免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

        AI

        陕西省| 南宫市| 花莲县| 沙田区| 定结县| 志丹县| 洛浦县| 绥棱县| 东阳市| 新河县| 广元市| 汨罗市| 赣榆县| 新源县| 余江县| 无极县| 华容县| 平乡县| 湖北省| 乌恰县| 巴林左旗| 美姑县| 兰溪市| 保康县| 汉中市| 锦州市| 罗江县| 阿瓦提县| 义乌市| 五河县| 南漳县| 德州市| 同江市| 新巴尔虎右旗| 南皮县| 张家港市| 晋江市| 塘沽区| 青海省| 平阴县| 固安县|