Bei der Netzwerkprogrammierung stoßen wir häufig auf Fehler und Ausnahmen. Unter anderem ist das Problem „pfring NewRing error: No such device“, das beim Öffnen der pfring-Bibliothek aus der Go-Sprache auftritt, ein häufiger Fehler, der Entwickler plagt. Der PHP-Editor Zimo analysiert die Gründe und Lösungen für diesen Fehler und hilft Ihnen, dieses Problem reibungslos zu lösen.
Ich möchte pf_ring vom Go-Code aus mit dem Paket github.com/google/gopacket/pfring
aufrufen, kann es aber nicht unter Debian 11 ausführen (mein Code läuft unter Debian 10).
Das ist mein Go-Code:
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) }
Wenn ich es ausführe:
# ./test-go 2023/01/24 10:12:25 failure: pfring newring error: no such device
Anscheinend existiert die eno1-Schnittstelle:
# 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]
Das Seltsame ist, dass derselbe in C geschriebene Code auch funktioniert:
#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!
Irgendwelche Ideen?
Es stellt sich heraus, dass es sich um einen Fehler in gopacket/pfring handelt, siehe Issue #147 und den Fix. Der Aufruf der Bibliothek an pfring_open
meldete keinen Fehler, aber die Bibliothek hat den Rückkehrcode falsch interpretiert.
Das obige ist der detaillierte Inhalt vonÖffnen von pfring von Go aus: pfring NewRing Fehler: Kein solches Gerät. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!