【发布时间】:2014-02-15 16:22:28
【问题描述】:
在离线 pcap 文件的情况下,如何使用 C/C++ 提取 TCP 标头中的选项字段。我尝试在标题结构中包含选项字段,但是当我将结果与 Wireshark 进行比较时,它并没有给出一致的结果。通过 TCP 标头结构访问时,似乎会丢失任意字节。请帮忙。
【问题讨论】:
在离线 pcap 文件的情况下,如何使用 C/C++ 提取 TCP 标头中的选项字段。我尝试在标题结构中包含选项字段,但是当我将结果与 Wireshark 进行比较时,它并没有给出一致的结果。通过 TCP 标头结构访问时,似乎会丢失任意字节。请帮忙。
【问题讨论】:
不要尝试直接读取文件,而是使用来自libpcap 的pcap_open_offline 或pcap_fopen_offline。这将读取保存文件并允许您提供过滤器。伪代码是这样的(你需要添加错误处理):
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 与 ETHER_TYPE_8021Q),然后找到 TCP 标头(IP 标头的长度可以变化),然后您才会得到一个指针到 TCP 标头。
【讨论】: