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

时间:2011-06-22 04:12:22

标签: 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 个答案:

答案 0 :(得分:1)

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

  1. popen来电没有开放模式?如果不这样做,可能会导致核心转储或堆栈的随机值决定它是读取还是写入管道。

  2. c变量应该是int而不是char,因为它必须能够容纳所有字符 plus EOF 1}}指示灯。

  3. 而且,您实际上并没有为<{1}}分配任何会导致循环退出的内容。

  4. 使用c循环,您尝试在结尾输出do到输出流。如果这是一件坏事,不要知道我的头脑,但这当然没有必要。

  5. 试试这个:

    EOF

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