Penjelasan terperinci tentang cara Go boleh melaksanakan penangkapan paket trafik lapisan pemandu dengan cepat

藏色散人
Lepaskan: 2023-03-14 17:09:51
ke hadapan
3293 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang golang terutamanya tentang cara melaksanakan penangkapan paket trafik lapisan pemandu di golang.

1. Penangkapan paket pemacu

Kita boleh menggunakan Fiddler, Httpdebugger, Charles dan alatan lain untuk menangkap paket pada lapisan aplikasi Jika kita perlu mendapatkan data dari bawah kad rangkaian peringkat, tidak ada cara untuk mencapai ini, kita perlu menggunakan pakej gopacket Google.

2. Menghadapi masalah

gopacket mempunyai dokumentasi yang kaya. Saya tidak akan menerangkan secara terperinci tentang cara menggunakannya di sini perlu dipasang terlebih dahulu pada Linux Pada Windows, anda perlu memasang Winpcap terlebih dahulu, jika tidak, ia tidak boleh digunakan, dan ia akan menyebabkan perpustakaan pautan dinamik yang berkaitan hilang. Mereka tidak mahu memasang perisian tambahan Kami akan menyelidik cara menyelesaikan masalah ini.

3. Cuba selesaikan masalah

Pertama sekali, kami tidak memasang sebarang alatan. Lihat mesej ralat sistem di sini:

couldn't load wpcap.dll
Salin selepas log masuk

Ia menggesa kami bahawa kami tidak menjumpai wpcap.dll Ini mudah difahami Kami tidak menjumpainya terlebih dahulu :

EXE所在目录
    ↓
当前目录GetCurrentDirectory();
    ↓
系统目录GetSystemDirectory();
    ↓
WINDOWS目录GetWindowsDirectory();
    ↓
环境变量PATH所包含的目录。
Salin selepas log masuk

Maka penyelesaiannya sangat mudah. ​​Bukankah cukup untuk meletakkan wpcap.dll dalam direktori di mana exe berada, tetapi ternyata ini tidak berfungsi. , dan ia masih menggesa bahawa perpustakaan pautan tidak ditemui. Kemudian, saya memanggil beberapa antara muka Windows dan menetapkan direktori dll secara manual:

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)
}
Salin selepas log masuk

Akibatnya, perpustakaan pautan masih tidak ditemui Pada ketika ini, semua kaedah yang boleh kami gunakan gagal. Terdapat masalah yang sama di Google, tetapi tiada siapa yang boleh memberikan penyelesaian. Mereka semua meminta kami untuk memasang Winpcap nampaknya tiada penyelesaian untuk masalah tersebut.

4. Penyelesaian

Gunakan kebergantungan untuk melihat kebergantungan dalaman

Penjelasan terperinci tentang cara Go boleh melaksanakan penangkapan paket trafik lapisan pemandu dengan cepat

Selepas bergelut selama beberapa jam, saya dijumpai Mendapat penyelesaian:

  • Salin wpcap.dll ke direktori system32

  • Salin packet.dll ke direktori system32

  • Salin pemacu npf.sys ke direktori pemacu di bawah system32

Kini anda tidak perlu memasang sebarang perisian untuk memanggil gopacket

fmt.Println(pcap.Version())
Salin selepas log masuk

Output

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

[Cadangan berkaitan: Pergi tutorial video]

Atas ialah kandungan terperinci Penjelasan terperinci tentang cara Go boleh melaksanakan penangkapan paket trafik lapisan pemandu dengan cepat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan