代码之家  ›  专栏  ›  技术社区  ›  Ilia Choly

libpcap数据包大小

  •  1
  • Ilia Choly  · 技术社区  · 16 年前

    我正在Linux上使用C语言的libpcap(centos),我正在关注 this guide 我只想用ascii打印出整个数据包,然后在“my callback”函数中将它转换成u_char*来让它正常工作。但我不知道如何得到数据的长度。strstr不起作用。报头有一个len成员,您可以访问该成员以获取大小,但对于传递的*数据包,我找不到类似的内容。如有任何帮助,我们将不胜感激。

    2 回复  |  直到 13 年前
        1
  •  3
  •   Einstein    16 年前

    在回调中,pkthdr变量的caplen成员(请参见struct pcap_pkthdr)包含 捕获 小包裹。

    例如,假设捕获了一个数据包。帧的总长度为1024字节。但是,捕获驱动程序只捕获了帧的前128个字节,并使其可用于回调。

    在这种情况下,pkthdr->caplen应为128,header->len应为1024。

        2
  •  1
  •   tremendows    13 年前

    总数据包大小在IP报头的“总长度”字段处( http://en.wikipedia.org/wiki/IPv4_header#Total_Length )

    如何使用libpcap获取该值可以在以下示例中找到: http://www.tcpdump.org/sniffex.c

    您只需从这个变量中获取引用“total leng”(名为ip_len)的字段的值:

    const struct sniff_ip *ip;              /* The IP header */