-1

楽しみのために単純なスニファーを作成していましたが、ダンプをファイルに出力したいと考えています。スニファーのコードは次のとおりです。

#include <stdio.h>
#include <pcap.h>

#define MAX_PACKET_NUM 5

int main(void) {

    struct pcap_pkthdr header;
    const u_char *packet;
    char errbuf[PCAP_ERRBUF_SIZE];
    char *device;
    pcap_t *pcap_handle;
    int i;

    printf("## Now sniffing on: %s ##\n", device);
    printf("## Max packets number for this session: %d\n", MAX_PACKET_NUM);

    printf("[?] Sniffing...\n");

    pcap_handle = pcap_open_live(device, 1000, 1, 0, errbuf);

    for(i=0; i < MAX_PACKET_NUM; i++) {
        packet = pcap_next(pcap_handle, &header);
        printf("[!] Captured a %d bytes packet!\n", header.len);
        dump(packet, header.len);
    }
}

正常に動作しますが、ダンプをファイルに出力するにはどうすればよいですか? ファイル ストリームを使用してみましたが、関数を出力する方法がよくわかりません。ご覧のとおり、dump()関数は出力を画面に出力します。ファイルに出力する関数があるのではないでしょうか? みんな助けてください!

4

2 に答える 2

3

あなたは機能を探していfprintfます。fopenファイルを開き、ファイルfprintfに書き込み、最後fcloseにファイルを閉じるために使用します。

于 2013-02-24T13:00:26.353 に答える
0

printf()スニファーが UN*X の一部のバージョンまたは Windows のコマンド ラインから実行され、たとえば(ではなく)を使用して「出力を画面に出力する」場合、fprintf()実際に行うことはその出力を出力することです。 「標準出力」に。

その場合、UN*X と Windows の両方で、標準出力をファイルに「リダイレクト」することにより、出力をファイルに送信できます。これは

mysniffer {command-line arguments} > {pathname to the file}
于 2013-02-24T19:40:36.873 に答える