Rumah >pembangunan bahagian belakang >Golang >Membuka pfring daripada Go: pfring NewRing Ralat: Tiada peranti sedemikian

Membuka pfring daripada Go: pfring NewRing Ralat: Tiada peranti sedemikian

王林
王林ke hadapan
2024-02-10 17:30:09472semak imbas

从 Go 打开 pfring:pfring NewRing 错误:没有这样的设备

Apabila melakukan pengaturcaraan rangkaian, kita sering menghadapi beberapa ralat dan pengecualian. Antaranya, masalah "pfring NewRing error: No such device" yang berlaku semasa membuka perpustakaan pfring daripada bahasa Go ialah ralat biasa yang melanda pembangun. Editor PHP Zimo akan menganalisis sebab dan penyelesaian untuk ralat ini dan membantu anda menyelesaikan masalah ini dengan lancar.

Kandungan soalan

Saya ingin memanggil pf_ring daripada kod go menggunakan pakej github.com/google/gopacket/pfring tetapi tidak dapat menjalankannya pada debian 11 (kod saya berjalan pada debian 10).

Ini kod pergi saya:

package main

import (
    "github.com/google/gopacket/pfring"
    "log"
)

func main() {
    _, err := pfring.newring("eno1@0", 1574, pfring.flagpromisc|pfring.flag(1<<14))
    if err == nil {
        log.printf("success!")
        return
    }
    log.fatalf("failure: %s", err)
}

Apabila saya menjalankannya:

# ./test-go 
2023/01/24 10:12:25 failure: pfring newring error: no such device

Nampaknya antara muka eno1 wujud:

# pf_ringcfg --list-interfaces
name: eno1                 driver: i40e       rss:     12   [supported by zc]
name: enp3s0f1             driver: i40e       rss:     12   [supported by zc]
name: enx0a229512eeb9      driver: cdc_ether  rss:     1    [linux driver]

Perkara yang pelik ialah kod yang sama yang ditulis dalam c juga berfungsi:

#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <pfring.h>

int main() {
    pfring* ring = pfring_open("eno1@0", 1574, pf_ring_promisc | pf_ring_zc_not_reprogram_rss);
    if (ring != null) {
        printf("success!\n");
        exit(0);
    }
    int e = errno;
    char* msg = strerror(e);
    printf("failure %d: %s\n", e, msg);
    exit(1);
}
# ./test-c 
Success!

Ada idea?

Penyelesaian

Ternyata ini adalah pepijat dalam gopacket/pfring, lihat Isu #147 dan membetulkan. Panggilan perpustakaan ke pfring_open melaporkan tiada ralat, tetapi perpustakaan telah menyalahtafsir kod pemulangan.

Atas ialah kandungan terperinci Membuka pfring daripada Go: pfring NewRing Ralat: Tiada peranti sedemikian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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