Вывести дамп сниффера во внешний файл на С

Я создавал простой сниффер, просто для удовольствия, и я хочу вывести дамп в файл. Вот код сниффера:

#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() выводит вывод на экран, может быть, есть функция для вывода в файл? Пожалуйста, помогите мне, ребята!

2 ответа

Ты ищешь fprintf функция. использование fopen открыть файл, fprintf записать в файл и в конце fclose закрыть файл.

Если ваш сниффер запускается из командной строки в какой-либо версии UN*X или в Windows, и если он "печатает вывод на экран", используя, например, printf() (скорее, чем fprintf()), то, что он действительно делает, это печатает свой вывод на "стандартный вывод".

В этом случае вы можете как в UN*X, так и в Windows отправить вывод в файл, "перенаправив" стандартный вывод в файл; это будет сделано с

mysniffer {command-line arguments} > {pathname to the file}
Другие вопросы по тегам