国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

21.3 Python 使用DPKT分析數(shù)據(jù)包

這篇具有很好參考價值的文章主要介紹了21.3 Python 使用DPKT分析數(shù)據(jù)包。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

dpkt項目是一個Python模塊,主要用于對網(wǎng)絡數(shù)據(jù)包進行解析和操作。它可以處理多種協(xié)議,例如TCP、UDPIP等,并提供了一些常用的網(wǎng)絡操作功能,例如計算校驗和、解析DNS數(shù)據(jù)包等。由于其簡單易用的特性,dpkt被廣泛應用于網(wǎng)絡安全領(lǐng)域,例如流量分析、漏洞利用、入侵檢測等。使用該庫可以快速解析通過各類抓包工具抓到的數(shù)據(jù)包,從而提取分析包內(nèi)的參數(shù)。

  • 安裝DPKT工具:pip install dpkt

在分析數(shù)據(jù)包之前我們需要抓取特定數(shù)據(jù)包并保存為*.pcap格式,通常情況下這種數(shù)據(jù)包格式可通過WireShark等工具抓取到,當然也可以使用上一篇提到的Scapy庫實現(xiàn),該庫中存在一個sniff函數(shù),該函數(shù)可以實現(xiàn)網(wǎng)絡抓包功能,如下一個演示案例我們分別通過sniff(count=2)函數(shù)抓取兩個數(shù)據(jù)包并使用wrpcap()函數(shù)將其保存到文件內(nèi),當需要分析時可通過調(diào)用rdpcap()函數(shù)打開數(shù)據(jù)包即可實現(xiàn)分析。

>>> from scapy.all import *
>>>
>>> packets = sniff(count=2)                            # 動態(tài)抓取2個數(shù)據(jù)包
>>>
>>> wrpcap("d://lyshark.pcap",packets)                  # 保存數(shù)據(jù)包
>>> pcap_packets = rdpcap("d://lyshark.pcap")           # 讀取數(shù)據(jù)包
>>>
>>> pcap_packets
<lyshark.pcap: TCP:2 UDP:0 ICMP:0 Other:0>
>>>
>>> pcap_packets.show()
0000 Ether / IP / TCP 192.168.1.101:63995 > 172.217.24.10:https S
0001 Ether / IP / TCP 192.168.1.101:63907 > 103.235.46.191:https A / Raw
>>>
>>> pcap_packets.summary()
Ether / IP / TCP 192.168.1.101:63995 > 172.217.24.10:https S
Ether / IP / TCP 192.168.1.101:63907 > 103.235.46.191:https A / Raw
>>>
>>> pcap_packets[0].dst
'FF:2d:1e:0f:1e:a1'
>>>
>>> pcap_packets[0].src
'a4:7e:33:ee:cc:b3'
>>>
# 如下分別代表: 鏈路層 [Ethernet]、網(wǎng)絡層[IP]、傳輸層[TCP/UDP]、應用層[RAW]
>>> pcap_packets[0].show()
>>>
# 抓包后直接輸出
>>> sniff(prn=lambda x: x.show(), count=1)

通過上方的抓包流程讀者即可實現(xiàn)簡單的抓包功能,當然sniff函數(shù)參數(shù)眾多我們完全可以在抓包時增加不同的抓包條件,同時該函數(shù)也支持回調(diào)函數(shù),當由新的請求被觸發(fā)時則自動執(zhí)行回調(diào)函數(shù),如下則是使用Scapy抓包的完整案例,該案例展示了抓取60秒數(shù)據(jù)包,并將其保存至d://lyshark.pcap目錄。

from scapy.all import *
import scapy.all as scapy

# 數(shù)據(jù)包回調(diào)函數(shù)
def packet_callback(packet):
    if packet[TCP].payload:
        m_packet = str(packet[TCP].payload)
        print("主機地址: {} ---> 數(shù)據(jù)包內(nèi)容: {}".format(packet[IP].dst,packet[TCP].payload))

if __name__ == "__main__":
    # 抓取80端口的數(shù)據(jù)包并輸出到屏幕
    # sniff(filter="tcp port 80", prn=packet_callback, store=0)

    # 抓取 過濾出tcp協(xié)議 抓取1分鐘后保存到文件中
    package=sniff(filter="tcp", timeout=60, prn=packet_callback, store=1)
    wrpcap("d://lyshark.pcap", package)

運行上方抓包程序,讀者可看到如下圖所示的輸出結(jié)果,等待60秒后即可看到d://lyshark.pcap文件。

21.3 Python 使用DPKT分析數(shù)據(jù)包

當讀者抓取到這些數(shù)據(jù)包之后,下一步則是解析這些數(shù)據(jù)包,解析的方法有許多可以使用DPKT解析,也可以使用scapy自帶的工具解析,本章首先介紹如何使用Scapy工具實現(xiàn)解析數(shù)據(jù)包內(nèi)的HTTP請求,并輸出的功能,如下是完整的代碼實現(xiàn);

from scapy.all import *
import scapy.all as scapy

# 解析獲取到的數(shù)據(jù)包
def get_http_pcap(pcap_path):
    pcap_infos = list()
    packets = scapy.rdpcap(pcap_path)
    for p in packets:
        if p.haslayer("IP"):
            src_ip = p["IP"].src
            dst_ip = p["IP"].dst
        if p.haslayer("TCP"):
            raw_http = p["TCP"].payload.original
            sport = p["TCP"].sport
            dport = p["TCP"].dport
        if p.haslayer("HTTPRequest"):
            host = p["HTTPRequest"].Host
            uri = p["HTTPRequest"].Path
            http_fields = p["HTTPRequest"].fields
            # print("主機地址: {} --> URI: {}".format(host,uri))
        print("原IP地址: {}:{} --> 目標IP地址: {}:{}".format(src_ip,sport,dst_ip,dport))

if __name__ == "__main__":
    get_http_pcap("d://lyshark.pcap")

讀者可自行運行上述代碼,并傳入剛才抓取到的lyshark.pcap數(shù)據(jù)包,此時則可解析出當前數(shù)據(jù)包中所有HTTP訪問數(shù)據(jù),如下圖所示;

21.3 Python 使用DPKT分析數(shù)據(jù)包

對于數(shù)據(jù)包的解包功能,Dpkt工具包也可以很好的完成,對于使用Dpkt解包而言,首先需要通過open()打開數(shù)據(jù)包,接著調(diào)用dpkt.pcap.Reader(fp)將文件內(nèi)的字節(jié)轉(zhuǎn)化為PCAP格式,最后調(diào)用自定義函數(shù)GetDpkt根據(jù)字段進行解析即可。

import dpkt
import socket

def GetDpkt(pcap):
    for timestamp,packet in pcap:
        try:
            eth = dpkt.ethernet.Ethernet(packet)
            ip = eth.data
            tcp = ip.data

            src = socket.inet_ntoa(ip.src)
            dst = socket.inet_ntoa(ip.dst)
            sport = tcp.sport
            dport = tcp.dport
            print("[+] 源地址: {}:{} --> 目標地址:{}:{}".format(src,sport,dst,dport))
        except Exception:
            pass

# 檢測主機是否被DDOS攻擊了
def FindDDosAttack(pcap):
    pktCount = {}
    for timestamp,packet in pcap:
        try:
            eth = dpkt.ethernet.Ethernet(packet)
            ip = eth.data
            tcp = ip.data
            src = socket.inet_ntoa(ip.src)
            dst = socket.inet_ntoa(ip.dst)
            sport = tcp.sport
            # 累計判斷各個src地址對目標地址80端口訪問次數(shù)
            if dport == 80:
                stream = src + ":" + dst
                if pktCount.has_key(stream):
                    pktCount[stream] = pktCount[stream] + 1
                else:
                    pktCount[stream] = 1
        except Exception:
            pass
    for stream in pktCount:
        pktSent = pktCount[stream]
        # 如果超過設(shè)置的檢測閾值500,則判斷為DDOS攻擊行為
        if pktSent > 500:
            src = stream.split(":")[0]
            dst = stream.split(":")[1]
            print("[+] 源地址: {} 攻擊: {} 流量: {} pkts.".format(src,dst,str(pktSent)))

# FindPcapURL 監(jiān)控提取數(shù)據(jù)包中的所有URL
def FindPcapURL(pcap):
    Url = []
    for timestamp,packet in pcap:
        try:
            eth = dpkt.ethernet.Ethernet(packet)
            ip = eth.data
            src = socket.inet_ntoa(ip.src)
            tcp = ip.data
            http = dpkt.http.Request(tcp.data)
            if(http.method == "GET"):
                UrlHead = http.headers
                for key,value in UrlHead.items():
                    url = re.findall('^https*://.*',str(value))
                    if url:
                        print("[+] 源地址: %10s --> 訪問URL: %-80s"%(src, url[0]))
        except Exception:
            pass
    return set(Url)

# 動態(tài)保存pcap文件(每1024字節(jié)保存一次pcap文件),并讀取出其中的網(wǎng)址解析出來
def write_cap(pkt):
    global pkts
    global count
    pkts.append(pkt)
    count += 1
    if count == 1024:
        wrpcap("data.pcap",pkts)
        fp = open("./data.pcap","rb")
        pcap = dpkt.pcap.Reader(fp)
        FindPcapURL(pcap)
        fp.close()
        pkts,count = [],0

if __name__ == "__main__":
    fp = open("d://lyshark.pcap","rb")
    pcap = dpkt.pcap.Reader(fp)
    GetDpkt(pcap)

運行上述代碼,同樣可以輸出這些IP信息,如下圖所示;

21.3 Python 使用DPKT分析數(shù)據(jù)包文章來源地址http://www.zghlxwxcb.cn/news/detail-711465.html

到了這里,關(guān)于21.3 Python 使用DPKT分析數(shù)據(jù)包的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 21.1 Python 使用PEfile分析PE文件

    PeFile模塊是 Python 中一個強大的便攜式第三方 PE 格式分析工具,用于解析和處理 Windows 可執(zhí)行文件。該模塊提供了一系列的API接口,使得用戶可以通過 Python 腳本來讀取和分析PE文件的結(jié)構(gòu),包括文件頭、節(jié)表、導入表、導出表、資源表、重定位表等等。此外,PEfile模塊還可以

    2024年02月08日
    瀏覽(23)
  • 【Python-Django】如何在一個項目中創(chuàng)建多個app模塊

    【Python-Django】如何在一個項目中創(chuàng)建多個app模塊

    django開發(fā)案例:a?????【Django】開發(fā)日報_1_Day:用戶管理系統(tǒng)案例-創(chuàng)建項目_django 開發(fā)用戶管理系統(tǒng)_代碼騎士的博客-CSDN博客 前面做過的管理系統(tǒng)項目功能比較單一,只用一個模塊就能解決問題。如果想創(chuàng)建多個不同的模塊的話,就需要創(chuàng)建多個app組件,下面就介紹一

    2024年02月06日
    瀏覽(26)
  • 21 Python的datetime模塊

    概述 ????????在上一節(jié),我們介紹了Python的time模塊,包括:time模塊中一些常用的屬性和函數(shù)。在這一節(jié),我們將介紹Python的datetime模塊。datetime模塊屬于Python的內(nèi)置模塊,提供了一種方便的方法來處理日期和時間。該模塊包含了許多類,包括:date、time、datetime、timedelta等

    2024年02月08日
    瀏覽(34)
  • 一圖看懂 setuptools 模塊:一個功能齊全、積極維護且穩(wěn)定的庫,旨在方便打包Python項目,資料整理+筆記(大全)

    一圖看懂 setuptools 模塊:一個功能齊全、積極維護且穩(wěn)定的庫,旨在方便打包Python項目,資料整理+筆記(大全)

    本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請聲明。 鏈接: https://blog.csdn.net/Ahcao2008 全文介紹python的 setuptools 模塊(一個功能齊全、積極維護且穩(wěn)定的庫,旨在方便打包Python項目)、函數(shù)、類及類的方法和屬性。 它通過代碼抓取并經(jīng)AI智能翻譯和人工校對。 是一部不可多得的權(quán)威字典類

    2024年02月06日
    瀏覽(25)
  • FineBI實戰(zhàn)項目一(21):不同支付方式訂單總額分析開發(fā)

    FineBI實戰(zhàn)項目一(21):不同支付方式訂單總額分析開發(fā)

    點擊新建組件,創(chuàng)建不同支付方式訂單總額組件。 選擇餅圖,拖拽total_money到角度,拖拽pay_type到顏色,調(diào)節(jié)內(nèi)徑。 修改顏色的標識文字。 將組件拖拽到儀表板。 結(jié)果如下:

    2024年02月02日
    瀏覽(20)
  • 實戰(zhàn)項目—使用Python,SqlServer,HTML實現(xiàn)簡單登錄模塊

    實戰(zhàn)項目—使用Python,SqlServer,HTML實現(xiàn)簡單登錄模塊

    ? ? ? ? 近期應老師的要求,要 使用一門編程語言連接數(shù)據(jù)庫制作一個簡單的登錄模塊 ,對于沒有做過項目的小白來說,根本無從下手,甚至不能理解怎么跨平臺操作。經(jīng)過近一周的查資料,改代碼,磕磕絆絆總算是實現(xiàn)了。 ? ? ? ? 我是用的語言是Python,后端平臺在pyc

    2024年02月09日
    瀏覽(13)
  • Python(21)json.dumps()使用indent參數(shù) 格式化輸出json數(shù)據(jù)格式

    json.dumps() 方法 將一個Python數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為JSON字符串 輸出為 這樣的格式一般都不優(yōu)美,當數(shù)據(jù)很多的時候,看得就不是很直觀方便。 可以使用 indent=4 參數(shù)來對json進行數(shù)據(jù)格式化輸出,會根據(jù)數(shù)據(jù)格式縮進顯示,讀起來更加清晰 用法如下 輸出為 json.dumps()方法,參數(shù)解釋

    2024年02月08日
    瀏覽(26)
  • 如何使用pycharm創(chuàng)建一個python項目

    如何使用pycharm創(chuàng)建一個python項目

    1.打開pycharm,點擊new project 2.修改項目存放位置,點擊第二個圓圈,點擊add interpreter添加解釋器 3.選擇一個系統(tǒng)內(nèi)置的解釋器 4.點擊創(chuàng)建按鈕即可 5.打開該項目 6.在工程的地方點擊鼠標右鍵–》選擇new–》選擇python file 7.給你的python文件取一個文件名,按回車鍵,創(chuàng)建成功

    2024年02月12日
    瀏覽(25)
  • Python數(shù)據(jù)分析項目案例

    Python數(shù)據(jù)分析項目案例

    第一部分:數(shù)據(jù)類型處理 數(shù)據(jù)加載 字段含義: user_id:用戶ID order_dt:購買日期 order_product:購買產(chǎn)品的數(shù)量 order_amount:購買金額 觀察數(shù)據(jù) 查看數(shù)據(jù)的數(shù)據(jù)類型 數(shù)據(jù)中是否存儲在缺失值 將order_dt轉(zhuǎn)換成時間類型 查看數(shù)據(jù)的統(tǒng)計描述 在源數(shù)據(jù)中添加一列表示月份:astype(\\\'datetime64[M

    2024年02月11日
    瀏覽(33)
  • 分享一個Python Django影片數(shù)據(jù)爬取與數(shù)據(jù)分析系統(tǒng)源碼

    分享一個Python Django影片數(shù)據(jù)爬取與數(shù)據(jù)分析系統(tǒng)源碼

    ???? 作者:計算機源碼社 ???? 個人簡介:本人七年開發(fā)經(jīng)驗,擅長Java、Python、PHP、.NET、微信小程序、爬蟲、大數(shù)據(jù)等,大家有這一塊的問題可以一起交流! ???? 學習資料、程序開發(fā)、技術(shù)解答、文檔報告 ????JavaWeb項目 ????微信小程序項目 ????Python項目 ????

    2024年02月09日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包