Wireshark-dev: Re: [Wireshark-dev] Packet Size limited during capture message
From: Brian Oleksa <oleksab@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 23 Mar 2010 11:42:02 -0400
ChrisI will have to look into why my dissector is crashing when I get the Packet Size Limited during capture message.
I am an employee of Dark Corner Software. I am writing the dissector for our clients that use our software.
I have fixed the license issue. Attached is the latest updated file that I am still working on.
We have open source software and closed source software. I am trying to get the open source dissector submitted through wireshark so it can become a part of the wireshark distribution (this is the attached copy).
Our closed source software is for our customers only. I have written a dissector for our closed source software for the client. This is where I am getting the "Packet Size limited during capture " message from.
Thanks, Brian Maynard, Chris wrote:
As Jakub pointed out, regardless of the snaplen, if Wireshark is crashing, then the bug is in the dissector, although IMO the biggest bug in the dissector is still the incompatible license. Brian, please carefully read http://www.gnu.org/licenses/gpl-faq.html#GPLModuleLicense Gerald et al, consider this e-mail as a report of a violation of the GPL per http://www.gnu.org/licenses/gpl-faq.html#ReportingViolation So until the dissector is properly licensed, I suggest contacting these folks for support on this dissector: http://www.darkcornersoftware.com/contact.html - Chris -----Original Message----- From: wireshark-dev-bounces@xxxxxxxxxxxxx [mailto:wireshark-dev-bounces@xxxxxxxxxxxxx] On Behalf Of Mike Morrin Sent: Tuesday, March 23, 2010 9:02 AM To: Developer support list for Wireshark Subject: Re: [Wireshark-dev] Packet Size limited during capture message -----Original Message----- From: wireshark-dev-bounces@xxxxxxxxxxxxx [mailto:wireshark-dev-bounces@xxxxxxxxxxxxx] On Behalf Of Brian Oleksa Sent: 23 March 2010 12:23 To: Developer support list for Wireshark Subject: Re: [Wireshark-dev] Packet Size limited during capture message ChrisI just found out that this was captured using tshark.....but nobody knows what the snaplen was.So my questions is.... My code is working correctly then....And that this was just a bad judgment of the wrong snaplen......correct..??Thanks, Brian -------------------------------------------------------------------- It is possible for a dissector bug to throw this exception even with a perfectly captured packet, see Bug 2855 for example. This message contains confidential information and may be privileged. If you are not the intended recipient, please notify the sender and delete the message immediately.ip.access Ltd, registration number 3400157, Building 2020, Cambourne Business Park, Cambourne, Cambridge CB23 6DW, United Kingdom___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe CONFIDENTIALITY NOTICE: The contents of this email are confidential and for the exclusive use of the intended recipient. If you receive thisemail in error, please delete it from your system immediately and notify us either by email, telephone or fax. You should not copy,forward, or otherwise disclose the content of the email. ___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe
/* ***** BEGIN LICENSE BLOCK ***** This program will dissect Dark Corner Software's Helen Packets. Copyright (C) 2010 <Kenneth Flynn flynnk@xxxxxxxxxxxxxxxxxxxxxx This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stdio.h> #include <glib.h> #include <epan/packet.h> #include <time.h> #include <string.h> #define PROTO_TAG_HELEN "HELEN" static int proto_helen = -1; static dissector_handle_t helen_handle; void dissect_helen(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); /*The following port is registered with IANA*/ static int helen_port = 5136; static const char *mon_names[12] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; static const value_string helen_gps_status[] = { { 0, "Good" }, { 1, "No Fix" }, { 2, "Bad GPS Read" }, { 0, NULL } }; /*not used*/ static const range_string helen_code[] = { {0x8000, 0xfffe, "Experimental"}, {0xffff, 0xffff, "Encryption Extension"}, {0, 0, "Tail"}, {1, 1, "GPS Extension"}, {2, 2, "Flow Extension"}, {3, 3, "Host Extension"}, {4, 4, "File Extension"}, {5, 999, "Reserved"}, {1000, 1000, "Minotaur SA Extension"}, {16000, 32767, "Unassigned"}, {0, 0, NULL} }; static gint hf_helen_magic = -1; static gint hf_helen_checksum = -1; static gint hf_helen_txTime = -1; static gint hf_helen = -1; static gint hf_helen_time = -1; static gint hf_helen_ipv4 = -1; static gint hf_helen_ipv6 = -1; static gint hf_helen_nos = -1; static gint hf_helen_flowname = -1; static gint hf_helen_longitude = -1; static gint hf_helen_latitude = -1; static gint hf_helen_altitude = -1; static gint hf_helen_bearing = -1; static gint hf_helen_speed = -1; static gint hf_helen_sequence_num = -1; static gint hf_helen_gpsstatus = -1; static gint hf_helen_source = -1; /*not used*/ static gint hf_helen_code = -1; static gint ett_helen = -1; void dissect_helen(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { proto_item *helen_item = NULL; proto_item *helen_sub_item = NULL; proto_tree *helen_tree = NULL; proto_tree *helen_header_tree = NULL; col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_HELEN); col_clear(pinfo->cinfo, COL_INFO); if (tree) { guint32 offset = 0; guint32 orig_offset = 18; nstime_t t; guint64 msecs_since_the_epoch; struct tm *tmp; helen_item = proto_tree_add_item(tree, proto_helen, tvb, 0, -1, FALSE); helen_tree = proto_item_add_subtree(helen_item, ett_helen); helen_header_tree = proto_item_add_subtree(helen_item, ett_helen); helen_sub_item = proto_tree_add_item(helen_tree, hf_helen_magic, tvb, offset, 2, FALSE); offset += 2; helen_sub_item = proto_tree_add_item(helen_tree, hf_helen_checksum, tvb, offset, 8, FALSE); offset += 8; msecs_since_the_epoch = tvb_get_ntoh64(tvb, offset); t.secs = msecs_since_the_epoch/1000; t.nsecs = (msecs_since_the_epoch%1000)*1000000; /* milliseconds to nanoseconds */ tmp = gmtime(&t.secs); proto_tree_add_time_format(helen_tree, hf_helen_txTime, tvb, offset, 8, &t, "Date: %s %2d, %d %02d:%02d:%02d UTC",mon_names[tmp->tm_mon],tmp->tm_mday, tmp->tm_year + 1900,tmp->tm_hour,tmp->tm_min,tmp->tm_sec); /*not used*/ //proto_tree_add_uint_format(helen_tree, hf_helen_txTime, tvb, offset, 8, msecs_since_the_epoch, // "Date: %s %2d, %d %02d:%02d:%02d UTC",mon_names[tmp->tm_mon],tmp->tm_mday, // tmp->tm_year + 1900,tmp->tm_hour,tmp->tm_min,tmp->tm_sec, msecs_since_the_epoch%1000); helen_header_tree = proto_item_add_subtree(helen_sub_item, ett_helen); { #define MAX_BUFFER 100 char *buf = (char*)ep_alloc(MAX_BUFFER); char * packet_name = ""; proto_tree *helen_sub_tree = NULL; offset = 18; for (;;) { guint16 code; guint16 numBytes = 0; guint unknownPacket = 0; guint codeOffset; offset = orig_offset; code = tvb_get_ntohs(tvb, offset); codeOffset = offset; offset += 2; switch (code) { case 0: packet_name = "End of Packet"; break; case 1: packet_name = "GPS Extension"; break; case 2: packet_name = "Flow Extension"; break; case 3: packet_name = "Host Extension"; break; default: packet_name = "Unknown code"; unknownPacket = 1; break; } /*not used*/ //proto_tree_add_item(tree, hf_helen_code, tvb, offset, 2, FALSE); g_snprintf(buf, MAX_BUFFER, "%s", packet_name); if (unknownPacket) { g_snprintf(buf, MAX_BUFFER, "Unknown packet: %d", code); } helen_item = proto_tree_add_text(tree, tvb, codeOffset, 2, "%s", buf); helen_sub_tree = proto_item_add_subtree(helen_item, ett_helen); if (code == 0) { break; } numBytes = tvb_get_ntohs(tvb, offset); offset += 2; /* GPS: */ if (code == 1) { guint8 fieldsAvail; fieldsAvail = tvb_get_guint8(tvb, offset); offset += 1; /* Status: */ if ((fieldsAvail & 1) != 0) { proto_tree_add_item(helen_sub_tree, hf_helen_gpsstatus ,tvb , offset, 1, FALSE); offset += 1; } /* Time: */ if ((fieldsAvail & 2) != 0) { nstime_t t; guint64 msecs_since_the_epoch; struct tm *tmp; msecs_since_the_epoch = tvb_get_ntoh64(tvb, offset); t.secs = msecs_since_the_epoch/1000; t.nsecs = (msecs_since_the_epoch%1000)*1000000; /* milliseconds to nanoseconds */ tmp = gmtime(&t.secs); proto_tree_add_time_format(helen_sub_tree, hf_helen_time, tvb, offset, 8, &t, "Date: %s %2d, %d %02d:%02d:%02d UTC",mon_names[tmp->tm_mon],tmp->tm_mday, tmp->tm_year + 1900,tmp->tm_hour,tmp->tm_min,tmp->tm_sec); offset += 8; } /* Longitude: */ if ((fieldsAvail & 4) != 0) { proto_tree_add_item(helen_sub_tree, hf_helen_longitude, tvb, offset, 4, FALSE); offset += 4; } /* Latitude: */ if ((fieldsAvail & 8) != 0) { proto_tree_add_item(helen_sub_tree, hf_helen_latitude, tvb, offset, 4, FALSE); offset += 4; } /* Altitude: */ if ((fieldsAvail & 16) != 0) { proto_tree_add_item(helen_sub_tree, hf_helen_altitude, tvb, offset, 4, FALSE); offset += 4; } /* Bearing: */ if ((fieldsAvail & 32) != 0) { proto_tree_add_item(helen_sub_tree, hf_helen_bearing, tvb, offset, 4, FALSE); offset += 4; } /* Speed: */ if ((fieldsAvail & 64) != 0) { gfloat speed; speed = tvb_get_ntohieee_float(tvb,offset);; if (speed != 0.0) { proto_tree_add_item(helen_sub_tree, hf_helen_speed, tvb, offset, 4, FALSE); } offset += 4; } /* Number of Satellites: */ if ((fieldsAvail & 128) != 0) { proto_tree_add_item(helen_sub_tree, hf_helen_nos, tvb, offset, 1, FALSE); offset += 1; } } /* FLOW: */ if (code == 2) { proto_tree_add_item(helen_sub_tree, hf_helen_flowname, tvb, offset, 8, FALSE); offset += 8; /* Sequence number: */ proto_tree_add_item(helen_sub_tree, hf_helen_sequence_num, tvb, offset, 4, FALSE); offset += 4; if (numBytes == 16) { /* Source: */ proto_tree_add_item(helen_sub_tree, hf_helen_source, tvb, offset, 4, FALSE); offset += 4; } } /* HOST: */ if (code == 3) { /* Size: */ guint8 size; size = tvb_get_guint8(tvb, offset); offset += 1; if (size == 4) { proto_tree_add_item(helen_sub_tree, hf_helen_ipv4, tvb, offset, 4, FALSE); offset += 4; } else { proto_tree_add_item(helen_sub_tree, hf_helen_ipv6, tvb, offset, 16, FALSE); offset += 16; } } orig_offset += numBytes + 4; } } } } void proto_reg_handoff_helen(void) { static gboolean initialized = FALSE; if (!initialized) { helen_handle = create_dissector_handle(dissect_helen, proto_helen); dissector_add("udp.port", helen_port, helen_handle); } initialized = TRUE; } void proto_register_helen(void) { static hf_register_info hf[] = { { &hf_helen, { "Data", "helen.data", FT_NONE, BASE_NONE, NULL, 0x0, "HELEN PDU", HFILL}}, { &hf_helen_magic, { "Magic Number", "helen.magicNumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, { &hf_helen_checksum, { "Checksum", "helen.checksum", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL}}, { &hf_helen_txTime, { "System Tx Time", "helen.SystemTxTime", FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL}}, { &hf_helen_time, { "Time", "helen.time", FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL}}, { &hf_helen_ipv4, { "IPv4", "helen.ipv4address", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL}}, { &hf_helen_ipv6, { "IPv6", "helen.ipv6address", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL}}, { &hf_helen_sequence_num, { "Sequence Number", "helen.sequenceNumber", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}}, { &hf_helen_source, { "Source", "helen.source", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}}, { &hf_helen_nos, { "Number of Satellites", "helen.numberOfSatellites", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}}, { &hf_helen_flowname, { "Flowname", "helen.flowname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}}, { &hf_helen_gpsstatus, { "GPS Status", "helen.gpsStatus", FT_UINT8, BASE_DEC, VALS(helen_gps_status), 0x0, NULL, HFILL}}, /*not used*/ { &hf_helen_code, { "Packet COde", "helen.packetCode", FT_UINT8, BASE_DEC, VALS(helen_code), 0x0, NULL, HFILL}}, /**/ { &hf_helen_longitude, { "Longitude", "helen.longitude", FT_FLOAT, BASE_DEC, NULL, 0x0, NULL, HFILL}}, { &hf_helen_latitude, { "Latitude", "helen.latitude", FT_FLOAT, BASE_DEC, NULL, 0x0, NULL, HFILL}}, { &hf_helen_altitude, { "Altitude", "helen.altitude", FT_FLOAT, BASE_DEC, NULL, 0x0, NULL, HFILL}}, { &hf_helen_bearing, { "Bearing", "helen.bearing", FT_FLOAT, BASE_DEC, NULL, 0x0, NULL, HFILL}}, { &hf_helen_speed, { "Speed", "helen.speed", FT_FLOAT, BASE_DEC, NULL, 0x0, NULL, HFILL}}, }; static gint * ett[] = {&ett_helen}; proto_helen = proto_register_protocol("HELEN", "HELEN", "helen"); proto_register_field_array(proto_helen, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); register_dissector("helen", dissect_helen, proto_helen); }
- Follow-Ups:
- Re: [Wireshark-dev] Packet Size limited during capture message
- From: Maynard, Chris
- Re: [Wireshark-dev] Packet Size limited during capture message
- From: Martin Visser
- Re: [Wireshark-dev] Packet Size limited during capture message
- References:
- [Wireshark-dev] Packet Size limited during capture message
- From: Brian Oleksa
- Re: [Wireshark-dev] Packet Size limited during capture message
- From: Mike Morrin
- Re: [Wireshark-dev] Packet Size limited during capture message
- From: Maynard, Chris
- Re: [Wireshark-dev] Packet Size limited during capture message
- From: Brian Oleksa
- Re: [Wireshark-dev] Packet Size limited during capture message
- From: Mike Morrin
- Re: [Wireshark-dev] Packet Size limited during capture message
- From: Maynard, Chris
- [Wireshark-dev] Packet Size limited during capture message
- Prev by Date: Re: [Wireshark-dev] Packet Size limited during capture message
- Next by Date: Re: [Wireshark-dev] Packet Size limited during capture message
- Previous by thread: Re: [Wireshark-dev] Packet Size limited during capture message
- Next by thread: Re: [Wireshark-dev] Packet Size limited during capture message
- Index(es):