人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

詳解Go如何快速實現(xiàn)驅(qū)動層流量抓包-天天滾動

來源:php中文網(wǎng) | 2023-03-14 17:09:16 |

本篇文章給大家?guī)砹岁P(guān)于golang的相關(guān)知識,其中主要給大家聊聊golang中怎么實現(xiàn)驅(qū)動層流量抓包,感興趣的朋友一起來看一下吧,希望對大家有幫助。

一、驅(qū)動抓包

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


(相關(guān)資料圖)

二、遇到問題

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所在目錄    ↓當(dāng)前目錄GetCurrentDirectory();    ↓系統(tǒng)目錄GetSystemDirectory();    ↓WINDOWS目錄GetWindowsDirectory();    ↓環(huán)境變量PATH所包含的目錄。

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

package mainimport (    "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)部依賴

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

將wpcap.dll復(fù)制一份到system32目錄

將packet.dll復(fù)制一份到system32目錄

將npf.sys驅(qū)動復(fù)制一份到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)

以上就是詳解Go如何快速實現(xiàn)驅(qū)動層流量抓包的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

關(guān)鍵詞: