0

このコードを実行してみましたが、何も表示されません。(はい、ルートとして実行しました) ngrep の出力が得られない場合は、C++ で libpcap を使用する方法を見つけようと思いますが、良い例は見つかりませんでした。

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

それで、このコードは何も表示されません.ngrepの出力を簡単に解析するために何を提案しますか、またはおそらくlibpcapを使用してGETリクエストをキャプチャする他の方法を提案します

4

1 に答える 1

1

考えられる潜在的な問題がわかります。

  1. popen通話のオープンモードはありませんか?これをオフのままにすると、コアダンプ、またはスタックのランダムな値によって、読み取りパイプか書き込みパイプかが決定される可能性があります。

  2. c変数は、すべての文字とインジケーターを保持できる必要があるため、ではなくあるint必要があります。charEOF

  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;
}

また、パイプはデフォルトで完全にバッファリングされているため、バッファがいっぱいになるまで情報を取得できない可能性があることにも注意してください。

于 2011-06-22T04:19:36.840 に答える