返回顶部
首页 > 资讯 > 精选 >从 Go 打开 pfring:pfring NewRing 错误:没有这样的设备
  • 590
分享到

从 Go 打开 pfring:pfring NewRing 错误:没有这样的设备

go语言网络编程 2024-02-10 17:02:28 590人浏览 安东尼
摘要

在进行网络编程时,我们经常会遇到一些错误和异常情况。其中,从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

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作