我尝试运行此代码,但没有显示任何内容。 (是的,我是以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
答案 0 :(得分:1)
我看到了可能存在的潜在问题:
popen
来电没有开放模式?如果不这样做,可能会导致核心转储或堆栈的随机值决定它是读取还是写入管道。
c
变量应该是int
而不是char
,因为它必须能够容纳所有字符 plus EOF
1}}指示灯。
而且,您实际上并没有为<{1}}分配任何会导致循环退出的内容。
使用c
循环,您尝试在结尾输出do
到输出流。如果这是一件坏事,不要知道我的头脑,但这当然没有必要。
试试这个:
EOF
您还应该知道默认情况下管道是完全缓冲的,因此在缓冲区已满之前您可能无法获得任何信息。