Maison >développement back-end >Golang >Ouverture de pfring depuis Go : pfring NewRing Erreur : aucun appareil de ce type
Lors de la programmation réseau, nous rencontrons souvent des erreurs et des exceptions. Parmi eux, le problème « erreur pfring NewRing : aucun périphérique de ce type » qui se produit lors de l'ouverture de la bibliothèque pfring à partir du langage Go est une erreur courante qui tourmente les développeurs. L'éditeur PHP Zimo analysera les raisons et les solutions de cette erreur et vous aidera à résoudre ce problème en douceur.
Je souhaite appeler pf_ring depuis le code go en utilisant le package github.com/google/gopacket/pfring
mais je n'arrive pas à le faire fonctionner sur Debian 11 (mon code fonctionne sur Debian 10).
Voici mon code de départ :
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) }
Quand je l'exécute :
# ./test-go 2023/01/24 10:12:25 failure: pfring newring error: no such device
Apparemment l'interface eno1 existe :
# 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]
Ce qui est bizarre c'est que le même code écrit en c fonctionne aussi :
#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!
Des idées ?
Il s'avère qu'il s'agit d'un bug dans gopacket/pfring, voir Issue #147 et le fix. L'appel de la bibliothèque à pfring_open
n'a signalé aucune erreur, mais la bibliothèque a mal interprété le code retour.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!