WinPcap создает пустой файл .pcap - PullRequest
0 голосов
/ 03 апреля 2020

Знаете ли вы, как создать пустой файл pcap с помощью winpcap dll? Я буферизирую отфильтрованные пакеты в памяти программы и хочу сохранить, когда пользователь щелкнет, чтобы экспортировать в файл .pcap.

Но при использовании pcap_open_offline (const char * fname, char * errbuf) можно открыть файл, только если файл существует. Я пытался fopen и другие функции для создания файла ранее (в двоичном режиме тоже), но безуспешно.

Так как получить указатель дескриптора pcap_t для pcap_dump_open (pcap_t * p, const char * fname) таким образом?

ОБНОВЛЕНО: я пытаюсь использовать этот код

fileHandle = pcap_open_offline(pcap_file_path.c_str(), errbuf);
if (errbuf == nullptr) {
    fprintf(stderr, "\nUnable to open the file %s.\n", pcap_file_path.c_str());
    return 1;
}

if (fileHandle == nullptr) {

    fprintf(stderr, "\nError to open file\n");//HERE IT FAILS
    return 1;
}

dumpfile = pcap_dump_open(fileHandle, pcap_file_path.c_str());
if (dumpfile == NULL)
{
    fprintf(stderr, "\nError opening output file\n");
    return 1;
}

РЕШЕНИЕ: ( Создание файла pcap )

/*create fake handle*/
fileHandle = pcap_open_dead(DLT_EN10MB, 65535);
if (fileHandle == nullptr) {
    fprintf(stderr, "\nError to open file\n");
    return 1;
}

/* Open the dump file */
dumpfile = pcap_dump_open(fileHandle, file_path.c_str());
if (dumpfile == NULL)
{
    fprintf(stderr, "\nError opening output file\n");
    return 1;
}

1 Ответ

0 голосов
/ 07 апреля 2020

Знаете ли вы, как создать пустой файл pcap с помощью winpcap dll? Я буферизирую отфильтрованные пакеты в программной памяти и хочу сохранить, когда пользователь щелкнет для экспорта в файл .pcap.

...

Так как получить указатель дескриптора pcap_t для pcap_dump_open (pcap_t * p, const char * fname) таким образом?

pcap_dump_open() возвращает дескриптор pcap_dumper_t * для использования при записи файла; pcap_t * используется для захвата или чтения , а не записи .

Что нужно сделать, если вы хотите напишите файл pcap, используйте pcap_dump_open(). Если у вас есть pcap_t *, с которого вы читаете или перехватываете отфильтрованные пакеты, вы должны использовать это pcap_t * при вызове pcap_dump_open().

...