Как 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 не учитывает короткие кадры напрямую, как вы делаете это в своем приложении, но этот счет зависит от исключений, которые могут не генерироваться из-за некоторых ошибок.
(в этом случае поле caplen структуры struct pcap_pkthdr будет меньше, чем len, то есть размер полезной нагрузки IP).
Исправить.
Однако, когда я реализовал простое приложение ( используйте libpcap), чтобы прочитать pcap, и посчитав таким образом (caplen против len), мои цифры немного выше, чем то, что сообщает wireshark.
Это либо ошибка в Wireshark, либо в вашем коде. Вы можете использовать фильтр _ws.short
, чтобы просмотреть все короткие кадры в Wireshark, а затем попытаться найти кадр, который ваше приложение обнаруживает как короткий, но Wireshark нет.
Wireshark Версия 2.2.6, захват содержит TLS, то есть по TCP
Ваша версия немного устарела. Последняя версия 3.2.1
, поэтому рассмотрите возможность обновления или, по крайней мере, тестирования с обеими версиями.