真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go怎么快速實現(xiàn)驅(qū)動層流量抓包

這篇文章主要介紹“Go怎么快速實現(xiàn)驅(qū)動層流量抓包”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Go怎么快速實現(xiàn)驅(qū)動層流量抓包”文章能幫助大家解決問題。

創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護、公眾號搭建、微信小程序、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!

一、驅(qū)動抓包

應(yīng)用層抓包我們可以使用Fiddler、Httpdebugger、Charles等工具,如果需要獲取更底層網(wǎng)卡的數(shù)據(jù),就沒法實現(xiàn)了,我們就需要使用谷歌的gopacket包。

二、遇到問題

gopacket的文檔豐富,這里不贅述如何去使用它,使用gopacket有一個前提:在Linux上需要提前安裝Npcap,在Windows上則需要提前安裝Winpcap,否則無法使用,會提示缺少相關(guān)的動態(tài)鏈接庫,這對于一些有潔癖的人來說就不太友好了,他們并不想去安裝多余的軟件,后面我們就來研究一下如何解決這個問題。

三、嘗試解決

首先我們不安裝任何工具,看一下錯誤提示,我這里使用的是Windows系統(tǒng):

couldn't load wpcap.dll

提示我們沒有找到wpcap.dll,這很好理解,我們的確沒有,先來看看dll在系統(tǒng)內(nèi)的加載順序:

EXE所在目錄
    ↓
當前目錄GetCurrentDirectory();
    ↓
系統(tǒng)目錄GetSystemDirectory();
    ↓
WINDOWS目錄GetWindowsDirectory();
    ↓
環(huán)境變量PATH所包含的目錄。

那解決辦法就很簡單了,去下載一個wpcap.dll放到exe所在目錄不就行了嗎,但事實證明這樣并不行,還是提示沒有找到鏈接庫。隨后,我又調(diào)用了一些Windows的接口,手動設(shè)置dll的目錄:

package main

import (
    "fmt"
    "github.com/google/gopacket/pcap"
    "golang.org/x/sys/windows"
    "os"
    "path/filepath"
    "unsafe"
)

func main() {
    kernel32, err := windows.LoadDLL("kernel32.dll")
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    proc, err := kernel32.FindProc("AddDllDirectory")
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    // 獲取絕對路徑
    absolute,err := os.Executable()
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    absolute = filepath.Join(absolute,"../")
    utf16Ptr, err := windows.UTF16FromString(absolute)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    r1, r2, err := proc.Call(uintptr(unsafe.Pointer(&utf16Ptr[0])))
    fmt.Println(r1, r2, err)
    version := pcap.Version()
    fmt.Println(version)
}

結(jié)果還是找不到鏈接庫,到這里,我們能用的方法都失效了。在谷歌上,也有類似的問題,但是沒人能給出解決方案,都是讓我們安裝Winpcap,問題好像無解。

四、解決方案

使用dependency查看內(nèi)部依賴

Go怎么快速實現(xiàn)驅(qū)動層流量抓包

在折騰了幾個小時候,找到了一個解決方案:

  • 將wpcap.dll復制一份到system32目錄

  • 將packet.dll復制一份到system32目錄

  • 將npf.sys驅(qū)動復制一份到system32下的drivers目錄

現(xiàn)在就不需要安裝任何軟件也可以調(diào)用gopacket

fmt.Println(pcap.Version())

輸出

WinPcap version 4.1.3 (packet.dll version 4.1.0.2980), based on libpcap version 1.0 branch 1_0_rel0b (20091008)

關(guān)于“Go怎么快速實現(xiàn)驅(qū)動層流量抓包”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。


文章名稱:Go怎么快速實現(xiàn)驅(qū)動層流量抓包
分享鏈接:http://weahome.cn/article/jsccdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部