我可以用 popen() 解析 ngrep 的输出吗?

标签 c parsing ngrep

我尝试运行此代码,但没有显示任何内容。 (是的,我以 root 身份运行它)如果我无法获得 ngrep 的输出,我想我会尝试找出如何将 libpcap 与 c++ 一起使用,尽管我还没有找到任何好的示例。

int main(void)
{
    FILE* fproc = popen("ngrep -d wlan0 GET");
    char c;
    do {
        printf("%c", fgetc(fproc));
    } while (c!=EOF);
}

那么这段代码会导致什么也没有显示,您建议如何轻松解析 ngrep 的输出,或者使用其他一些捕获 GET 请求的方法(也许使用 libpcap)

最佳答案

我看到了可能存在的潜在问题:

  1. 您没有用于 popen 调用的打开模式吗?关闭此选项可能会导致核心转储或堆栈的随机值决定它是读管道还是写管道。

  2. c 变量应该是 int 而不是 char,因为它必须能够保存所有字符加上一个EOF指示器。

  3. 而且,您实际上并没有为 c 分配任何东西,这会导致循环退出。

  4. 通过该 do 循环,您尝试将 EOF 输出到最后的输出流。我不知道这是否是一件坏事,但肯定没有必要。

试试这个:

int main(void) {
    int ch;
    FILE* fproc;

    if ((fproc = popen("ngrep -d wlan0 GET", "r")) < 0) {
        fprintf (stderr, "Cannot open pipe\n");
        return 1;
    }

    while ((ch = fgetc (fproc)) != EOF) {
        printf ("%c", ch);
    };

    pclose (fproc);

    return 0;
}

您还应该注意,默认情况下管道是完全缓冲的,因此在缓冲区已满之前您可能无法获取任何信息。

关于我可以用 popen() 解析 ngrep 的输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434804/

相关文章:

linux - Ngrep 多个 pcaps

regex - 正则表达式 - 搜索直到出现特定字符串

c - 指针和取消引用

c - 正确的 C 函数参数变量定义位置

c - 将不同类型字符的字符串拆分为单独的字符串

python - 解析python中的配置设置

java - 如果在我的表达之后需要词法分析器怎么办?

c - NetBeans 中的 .c 文件集合及其 main()

java - 如何解析这样的文本?

python - 如何在 python 中生成另一个进程并捕获输出?