如何使用C / C ++提取pcap文件的TCP头中的选项字段

时间:2014-02-15 05:21:07

标签: c++ c tcp pcap

如果是脱机pcap文件,如何使用C / C ++提取TCP标头中的选项字段。我尝试在标题结构中包含选项字段,但是当我将结果与Wireshark进行比较时,它并没有给出一致的结果。当通过TCP头结构访问时,似乎缺少任意字节。请帮忙。

1 个答案:

答案 0 :(得分:0)

不要尝试直接阅读文件,而是使用pcap_open_offline中的pcap_fopen_offlinelibpcap。这将读取保存文件并允许您提供过滤器。伪代码就像这样(你需要添加错误处理):

char *fname = "/path/to/my/file";
const u_char *packet;
pcap_t *handle;

handle = pcap_open_offline (fname, errbuf);

while (packet = pcap_next(handle,&header))
{
    char *data = (char *) packet;
    ...
}

pcap_close (handle);

如果您已经使用libpcap,则必须发布代码。请记住,为了可靠地找到IP头,您需要检查以太网类型(ETHER_TYPE_IP vs ETHER_TYPE_8021Q),然后找到TCP头(IP头的长度可以变化),然后才会你得到一个指向TCP头的指针。