将 pcap 文件读入某个缓冲区

Reading pcap file into some buffer

任何人都可以提供 c++ 代码来将 pcap 文件读入缓冲区吗?请指定我需要添加的头文件以有效地执行任务。

我没有尝试过任何东西,因为我对此一无所知。

你在网上搜索过pcap库吗?要求我们为您找到它是题外话,所以请尽情享受吧。

你只需要 - 惊喜惊喜 - pcap.h。里面有文件 header 的结构,我个人定义了自己的 16 字节数据包 header 结构,因为 pcap.h 中的 pcap_pkthdr 结构在 64 位上将是 24 字节机器,但 on-disk 大小始终为 16 字节:它只是 32 位整数 seconds-since-epoch,纳秒,捕获期间看到的实际数据的长度,pcap 文件中捕获的数据长度(可以更少) - 检查 pcap_pkthdr 最后两个的顺序,我不记得了。我只对文件进行过内存映射并使用上述结构来解析它。我怀疑 pcap 库包含可用于打开文件、解析文件 header 和数据包 headers 的函数(如果您愿意的话)——我相信它会有文档。

如果您遇到困难,请返回正确的问题、代码等。


所以,您确实带回了代码 - 粘贴为下面的注释并在此处格式化以便于阅读:

pthread_t td;
pcapNext = true; 
unsigned long fileLen; 
std::string pcapfile = "packet.pcap"; 
std::cout << "FileName :" << pcapfile << std::endl; 
pcap_t* pcap; 
char errbuf[PCAP_ERRBUF_SIZE]; 
struct pcap_pkthdr header; 
pcap = pcap_open_offline(pcapfile.c_str(), errbuf); 
if (pcap == NULL)
{
    fprintf(stderr, "error reading pcap file: %s\n", errbuf);
    exit(1);
} 
int pktCount = 0; 
const unsigned char* packet; 
while ((packet = pcap_next(pcap, &header)) != NULL && pcapNext)
{ 
    usleep(50000); 
    const unsigned char* packet1 = packet; 
    pktCount++; 
    packet = NULL;
} 
fileLen = ftell(pcap);

buffer = (char*)malloc(fileLen + 1); 
if (!buffer)
{ 
    fprintf(stderr, "Memory error!");
    fclose(pcap);
    return;
}
fread(buffer, fileLen, 1, pcap);
std::cout << "Pcap_File_Close...." << std::endl;
fclose(pcap);

这让我觉得很奇怪。您通常希望在 while 循环中对每个数据包进行一些处理,但是您跳过数据包然后尝试从文件末尾读取数据:如果您在文件末尾,我假设您正在读取 0 个字节,但您没有检查读取的字节数或对数据执行任何操作。无论如何,即使你在像那样读取文件之前返回到第一个数据包,你也会收集所有数据包 headers 并且无论如何都必须自己重新解析它,那有什么意义呢?