错误呈现
1.wireshark等工具直接打开pcap流量包文件,但弹出截断错误。
2.tshark等解包工具,解包时发生打开文件错误。
3.流量包损坏或空(正常空包大小是24B,有头有尾)。
分析及解决
. 1.权限,看好pcap包权限,因权限问题可能发生pcap文件读写失败。
2.有没有关闭各个接口或描述符?
抓包时,肯定要使用
pcap_t *pd = NULL;
pcap_dumper_t *dumpfp = NULL;
char errbuf[PCAP_ERRBUF_SIZE] = {0};
// 打开网卡设备pd = pcap_open_live("nic网卡名", 65535, 0, 1000, errbuf);
if (NULL == pd)
{
perror("pcap_open_live():%s\n", errbuf);
return -1;
}// 打开pcap文件
dumpfp = pcap_dump_open(pd, "pcap文件路径");
if (NULL == dumpfp)
{
perror("sniff_execute pcap_dump_open err\n");
pcap_close(pd);
return -1;
}//pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);抓包写入
上面是一般情况下需要开启的接口。秉承有开就有关原则:
pcap_dump_close(dumpfp);
pcap_close(pd);
关闭接口就是必要操作。建议写在错误返回中或中断抓包行为后,如果强制结束而不关闭接口,那,大概率产生pcap文件截断的问题,推测是缺少包尾。