日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

用Go實現自己的網絡流量解析和行為檢測引擎

來源: 責編: 時間:2024-01-02 09:30:08 220觀看
導讀1.前言最近有個在學校讀書的迷弟問我:大德德, 有沒有這么一款軟件, 能夠批量讀取多個抓包文件,并把我想要的數據呈現出來, 比如:源IP、目的IP、源mac地址、目的mac地址等等。我說:“這樣的軟件你要認真找真能找出不少

1.前言

最近有個在學校讀書的迷弟問我:大德德, 有沒有這么一款軟件, 能夠批量讀取多個抓包文件,并把我想要的數據呈現出來, 比如:源IP、目的IP、源mac地址、目的mac地址等等。我說:“這樣的軟件你要認真找真能找出不少開源軟件, 但畢竟沒有你自己的靈魂在里面,要不咱自己用Go實現一個吧”, OK , Let's go。oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

2.摘要

能夠實現網絡協議解析和分析的工具有很多,最有名使用最多的是基于圖形化界面的Wireshark, 除了能夠實現網絡實時抓包,還能夠離線分析Pcap包文件, 雖然它通常用于手動分析網絡數據包, 但也支持自動化腳本和插件來提取元數據。而Wireshark還有一個基于命令行版本的Tshark, 可以用于自動化任務, 可以批量處理Pcap文件, 提取所需數據并導出到文件中。oTd28資訊網——每日最新資訊28at.com

本次用Go語言實現的網絡協議解析功能是基于Google公司開發一個開源庫:gopacket, 該庫幫我們完成了網絡協議的一些底層封裝, 它允許我們能夠捕獲、解析和處理網絡數據包, 與Wireshark一樣,也支持對離線抓包文件的分析。gopacket庫提供了一系列功能,包括:數據包捕獲、解析和構建, 以及對多種協議的支持,如:Ethernet、IP、TCP、UDP、HTTP等。它還提供了方便的API, 以幫助開發者操作和分析網絡數據包。oTd28資訊網——每日最新資訊28at.com

3.實現原理

谷歌公司開發的gopacket提供了5個子包接口供使用者調用,其中Layers子包負責協議解析;pcap子包實際是libpcap的包裝,主要用于數據包格式解析;pfring子包和afpacket用于快速數據庫包抓取;tcpassembly用于TCP流重組。在本篇文章中,主要利用gopacket提供的Layers和pcap接口實現上層業務邏輯。在流量解析引擎中,調用pcap接口對離線pcap抓包文件進行數據包解析,并配合Layers接口實現協議解析,目前根據業務種類,實現的協議解析包括:HTTP協議、TCP/UDP協議、ICMP協議和802.11協議。流量解析引擎的整體架構如下:oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

我們實現的流量解析引擎主要針對離線pcap包文件, 支持的協議類型包括:HTTP協議、TCP/UDP協議、ICMP協議、802.11(無線協議),通過對各類協議的解析,可以實現一些高級功能,例如: 特征庫匹配、漏洞掃描檢測、一些網絡攻擊檢測等等。oTd28資訊網——每日最新資訊28at.com

通過對gopacket開源包的研究,整理出其使用方法如下:oTd28資訊網——每日最新資訊28at.com

  • 利用pcap子包的OpenOffline方法加載離線數據包文件,加載成功返回離線數據包文件句柄。
  • 離線包文件句柄通過SetBPFFilter方法過濾數據類型,調用LinkType()方法獲取鏈路類型。
  • 將第2步中的文件句柄和LinkType作為參數調用方法NewPacketSource。
  • NewPacketSource調用Packet()方法獲取離線包文件中所有的數據包,通過遍歷每個數據包進行下一步操作。
  • 每個數據包對象通過調用Layer()方法獲取數據對象層,參數為數據對象的種類,種類有很多種,根據不同的協議類型進行區分。
  • 獲取的數據層級操作對象是數據包解析基礎方法需要達到的目的,即將解析的具體數據將在數據層級中進行不同方法的篩選。

大致的調用關系整理如下圖:oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

4.功能代碼實現

在我們的工程項目中,首先要引入三個包,它們是:oTd28資訊網——每日最新資訊28at.com

import(  "github.com/google/gopacket"  "github.com/google/gopacket/layers"  "github.com/google/gopacket/pcap")

因為我們操作的對象主要是針對離線pcap包, 因此首先要加載離線包文件,代碼如下:oTd28資訊網——每日最新資訊28at.com

handle, err = pcap.OpenOffline(pcapFilePath)if err != nil {    log.Panic(err)}

handle是加載離線包文件后返回的文件句柄,類型為:*pcap.Handle,接下來我們要設置一下過濾,只針對tcp連接的包,所以通過上面的文件句柄調用過濾函數:oTd28資訊網——每日最新資訊28at.com

err = handle.SetBPFFilter("tcp")  if err != nil {  log.Panic(err)}

根據上面的調用關系圖,我們需要調用NewPacketSource方法,代碼如下:oTd28資訊網——每日最新資訊28at.com

packetSource := gopacket.NewPacketSource(handle, handle.LinkType())packets := packetSource.Packets()

packetSource.Packets()方法返回的是一個通道, 用來接收gopacket解析出來的每一個數據包,oTd28資訊網——每日最新資訊28at.com

因此這里需要做循環接收,并在循環內容解析ethernet層, 解析大致過程如下:oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

下面我們根據上面的流程圖解析LayerTypeEthernet, 代碼如下:oTd28資訊網——每日最新資訊28at.com

for packet := range packetSource.Packets() {    ethernetLayer := packet.Layer(layers.LayerTypeEthernet)    if ethernetLayer == nil {        continue    }    ethernetPacket, _ := ethernetLayer.(*layers.Ethernet)}

下面涉及到協議的層級,我們對照Wireshark的包對比看一下,如圖:oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

從上圖的協議結構中我們可以看到,源IP地址和目的IP地址是在IPv4層上, 源端口和目的端口是在TCP層上, 而mac地址是在Ethernet層上, 因此要想獲取這6個元數據,我們至少要解析三層協議, 添加以下代碼:oTd28資訊網——每日最新資訊28at.com

for packet := range packetSource.Packets() {    ethernetLayer := packet.Layer(layers.LayerTypeEthernet)    if ethernetLayer == nil {        continue    }    ethernetPacket, _ := ethernetLayer.(*layers.Ethernet)    if ethernetPacket.EthernetType.String() == "IPv4" {        ipLayer := packet.Layer(layers.LayerTypeIPv4)        if ipLayer == nil { continue }                // 這里從IPv4協議層取源IP和目的IP數據        ipInfo, _ := ipLayer.(*layers.IPv4)                        tcpLayer := packet.Layer(layers.LayerTypeTCP)        if tcpLayer == nil { continue }                // 這里從TCP協議層取TCP數據,獲取源端口和目的端口數據        tcpInfo, _ := tcpLayer.(*layers.TCP)                //下面的代碼取具體的Payload        applicationLayer := packet.ApplicationLayer()        if applicationLayer == nil { continue }        payload := string(applicationLayer.Payload())                // 從GET或POST請求中取出元數據        if strings.HasPrefix(payload, "GET") || strings.HasPrefix(payload, "POST") {            fmt.Println("源mac地址:", ethernetPacket.SrcMAC.String())            fmt.Println("目的Mac地址:", ethernetPacket.DstMAC.String())            fmt.Println("源IP地址:", ipInfo.SrcIP.String())            fmt.Println("目的IP地址:", ipInfo.DstIP.String())            fmt.Println("源端口:", int(tcpInfo.SrcPort))            fmt.Println("目的端口:", int(tcpInfo.DstPort))        }    }}

5.行為檢測實現

這里我們以檢測數據庫的匿名登錄行為為例子, 首先在kali系統上對目標數據庫嘗試匿名登錄,如圖:oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

在登錄過程中,使用Wireshark進行網絡抓包,如圖:oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

從上面的抓包文件中,我們可以根據Payload偏移提取一些行為特征,例如:oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

將特征檢測的邏輯加入到代碼中:oTd28資訊網——每日最新資訊28at.com

for packet := range packetSource.Packets() {    ethernetLayer := packet.Layer(layers.LayerTypeEthernet)    if ethernetLayer == nil {        continue    }    ethernetPacket, _ := ethernetLayer.(*layers.Ethernet)    if ethernetPacket.EthernetType.String() == "IPv4" {        ipLayer := packet.Layer(layers.LayerTypeIPv4)        if ipLayer == nil { continue }                // 這里從IPv4協議層取源IP和目的IP數據        ipInfo, _ := ipLayer.(*layers.IPv4)                if ipInfo.Protocol.String() == "TCP" {          tcpLayer := packet.Layer(layers.LayerTypeTCP)          tcp, _ := tcpLayer.(*layers.TCP)          if (len(tcp.Payload) > 36 && bytes.Equal(tcp.Payload[13:37], []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})) || (len(tcp.Payload) > 39 && bytes.Equal(tcp.Payload[13:40], []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 111, 111, 116})) {            fmt.Println("發現數據庫匿名登錄行為!")          }        }    }}

將上面的代碼編譯后加載離線pcap包跑一下,可以看到已經匹配到行為特征,如圖:oTd28資訊網——每日最新資訊28at.com

oTd28資訊網——每日最新資訊28at.com

可以看到,已經成功命中行為特征。oTd28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-55078-0.html用Go實現自己的網絡流量解析和行為檢測引擎

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 又崩了?盤點2023年十大線上事故!

下一篇: [備忘錄]Markdown最常用的20個語法

標簽:
  • 熱門焦點
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰略發布會結束之后,Redmi總經理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • 消息稱迪士尼要拍真人版《魔發奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實有點忙,忙著將不少動畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發奇緣》也在路上了。據外媒消息稱,迪士尼將打造真人版
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的“新電商三兄弟”成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 到手價3099元起!iQOO Neo8 Pro今日首銷:安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • 中關村論壇11月25日開幕,15位諾獎級大咖將發表演講

    11月18日,記者從2022中關村論壇新聞發布會上獲悉,中關村論壇將于11月25至30日在京舉行。本屆中關村論壇由科學技術部、國家發展改革委、工業和信息化部、國務
Top 主站蜘蛛池模板: 钟山县| 平顶山市| 抚顺县| 绍兴县| 临邑县| 张家川| 井陉县| 正宁县| 渑池县| 泾阳县| 西贡区| 隆化县| 黎川县| 昭通市| 顺昌县| 威信县| 洛扎县| 星座| 石家庄市| 高雄县| 卢龙县| 屯门区| 保定市| 敖汉旗| 中阳县| 墨竹工卡县| 福鼎市| 武乡县| 榆树市| 游戏| 黔南| 徐闻县| 永安市| 策勒县| 贵阳市| 青浦区| 平乐县| 法库县| 黄山市| 鄂州市| 大名县|