この記事は、golang に関する関連知識を提供します。主に、golang でドライバー層のトラフィック パケット キャプチャを実装する方法について説明します。興味のある友人は、ぜひ読んでみてください。皆さんのお役に立てれば幸いです。
1. ドライバー パケット キャプチャ
Fiddler、Httpdebugger、Charles およびその他のツールを使用して、アプリケーション層でパケットをキャプチャできます。これを実現するには、Google の gopacket パッケージを使用する必要があります。
2. 問題の発生
gopacket には豊富なドキュメントがあります。ここでは使用方法の詳細については説明しません。gopacket を使用するには前提条件があります: Npcap Linux では事前に Winpcap をインストールする必要があります。Windows では、Winpcap を事前にインストールする必要があります。そうしないと使用できず、関連するダイナミック リンク ライブラリが見つからないというメッセージが表示されます。これは潔癖症の人にとってはあまり親切ではありません。余分なソフトウェアをインストールしたくないのです。後で戻ってきます。この問題の解決方法を調べてください。
3. 問題を解決してみます
まず、ツールはインストールしません。エラー メッセージを見てください。Windows を使用しています。ここのシステム:
couldn't load wpcap.dll
プロンプト わかりやすい wpcap.dll が見つかりませんでした。見つかりませんでした。まず、システム内の DLL の読み込み順序を見てみましょう:
EXE所在目录 ↓ 当前目录GetCurrentDirectory(); ↓ 系统目录GetSystemDirectory(); ↓ WINDOWS目录GetWindowsDirectory(); ↓ 环境变量PATH所包含的目录。
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) }
4. 解決策
依存関係を使用して内部依存関係を表示する数時間苦労した結果、 found 解決策を見つけました: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 ビデオ チュートリアル]
以上がGo がドライバー層のトラフィック パケット キャプチャを迅速に実装する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。