首页 > 解决方案 > Wireshark如何计算短帧数

问题描述

Statistics->Protocol Hierarchy显示各种统计信息,包括短帧计数。如何wireshark计算这个,它认为什么是短帧?是否与捕获期间故意截断的数据包相同?(在这种情况下caplen,字段struct pcap_pkthdr将小于len,即 IP 有效负载大小)。

但是,当我实现简单的应用程序(使用libpcap)来读取 pcap 并以这种方式计数(caplen 与 len)时,我的数字略高于wireshark报告的数字。

Wireshark 版本 2.2.6,捕获包含 TLS,即通过 TCP。Wireshark ProtocolHierarchy 菜单报告 15240 个 SSL 数据包,以及这 15240 个中的 13640 个短帧。

标签: networkingwiresharklibpcap

解决方案


Wireshark 如何计算这一点,它认为什么是短帧?

当 Wireshark 捕获到BoundsError异常ScsiBoundsError时,它会将帧标记为短帧。

来自epan/show_exception.c:41

        proto_short = proto_register_protocol("Short Frame", "Short frame", "_ws.short");

来自epan/show_exception.c:81-104

        case BoundsError:
                {   
                gboolean display_info = TRUE;

                ....................................

                if (display_info)
                        col_append_str(pinfo->cinfo, COL_INFO, "[Packet size limited during capture]");
                proto_tree_add_protocol_format(tree, proto_short, tvb, 0, 0,
                                "[Packet size limited during capture: %s truncated]", pinfo->current_proto);
                /* Don't record BoundsError exceptions as expert events - they merely
                 * reflect a capture done with a snapshot length too short to capture
                 * all of the packet
                 * (any case where it's caused by something else is a bug). */
        }

是否与捕获期间故意截断的数据包相同?

是的,应该是。但我想说的是,可能存在细微差别,因为 Wireshark 不会像您在应用程序中那样直接计算短帧,但计数取决于可能由于某些错误而不会引发的异常。

(在这种情况下,struct pcap_pkthdr 的 caplen 字段将小于 len,即 IP 有效负载大小)。

正确的。

然而,当我实现简单的应用程序(使用 libpcap)来读取 pcap 并以这种方式计数(caplen 与 len)时,我的数字略高于wireshark 报告的数字。

它要么是 Wireshark 中的错误,要么是您的代码中的错误。您可以使用_ws.short过滤器查看 Wireshark 中的所有短帧,然后尝试查找您的应用检测为短但 Wireshark 没有的帧。

Wireshark 版本 2.2.6,捕获包含 TLS,即通过 TCP

你的版本有点过时了。最新版本3.2.1因此考虑升级或至少测试两个版本。


推荐阅读