在进行网络编程时,我们经常会遇到一些错误和异常情况。其中,从Go语言打开pfring库时出现的"pfring NewRing 错误:没有这样的设备"问题是一个常见的困扰开发者的错误。P
在进行网络编程时,我们经常会遇到一些错误和异常情况。其中,从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
#include
#include
#include
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 错误:没有这样的设备的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: 从 Go 打开 pfring:pfring NewRing 错误:没有这样的设备
本文链接: https://lsjlt.com/news/563165.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0