在進行網路程式設計時,我們常常會遇到一些錯誤和異常情況。其中,從Go語言開啟pfring函式庫時出現的"pfring NewRing 錯誤:沒有這樣的裝置"問題是一個常見的困擾開發者的錯誤。 php小編子墨將為大家解析這個錯誤的原因和解決方法,幫助大家順利解決這個問題。
我想使用github.com/google/gopacket/pfring
套件從go 程式碼中呼叫pf_ring,但無法使其在debian 11 上運行(我的程式碼在debian 10 上運行)。
這是我的 go 程式碼:
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) }
當我運行它時:
# ./test-go 2023/01/24 10:12:25 failure: pfring newring error: no such device
顯然eno1介面是存在的:
# 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]
奇怪的是用 c 寫的相同程式碼也能運作:
#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!
有什麼想法嗎?
事實證明,這是 gopacket/pfring 中的一個錯誤,請參閱問題 #147 以及修復。該函式庫對 pfring_open
的呼叫未報告錯誤,但函式庫錯誤解釋了回傳碼。
以上是從 Go 開啟 pfring:pfring NewRing 錯誤:沒有這樣的設備的詳細內容。更多資訊請關注PHP中文網其他相關文章!