登录
首页 >  Golang >  Go问答

无法打开 pfring:pfring NewRing 错误:设备不存在

来源:stackoverflow

时间:2024-02-06 10:54:22 326浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《无法打开 pfring:pfring NewRing 错误:设备不存在》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我想使用 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 的调用未报告错误,但库错误解释了返回码。

本篇关于《无法打开 pfring:pfring NewRing 错误:设备不存在》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>