Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang cara Go boleh melaksanakan penangkapan paket trafik lapisan pemandu dengan cepat

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

藏色散人
藏色散人ke hadapan
2023-03-14 17:09:513223semak imbas

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

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

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

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)
}

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())

Output

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

[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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam