WinPcap 创建空的 .pcap 文件

WinPcap creating empty .pcap file

你知道如何用winpcap dll创建空文件pcap吗?我在程序内存中缓冲过滤后的数据包,并希望在用户单击导出到 .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;
}

解决方案:(Creating a pcap file)

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

Do you know how to create empty file pcap with winpcap dll? I buffer filtered packets in program memory and want to save when user click to export to .pcap file.

...

So how to get pcap_t handle pointer for pcap_dump_open(pcap_t *p, const char *fname) this way?

pcap_dump_open() returns一个pcap_dumper_t *写文件时使用的句柄; pcap_t * 用于 捕获 读取 ,而不是 写入 .

如果你想一个pcap文件,你需要做的是使用pcap_dump_open()。如果您有一个 pcap_t * 从中读取或捕获已过滤的数据包,则应在调用 pcap_dump_open().

时使用该 pcap_t *