
在进行网络编程时,我们经常会遇到一些错误和异常情况。其中,从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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号