Ethereal-dev: [Ethereal-dev] Support for pure protocol packets without underlying protocol dat
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Navin Anand <navinanand@xxxxxxxxxxxxx>
Date: Tue, 24 Jun 2003 17:14:56 +0530
Hello,My SS7 application provides me with protocol packets dump at each layer (without the underlying protocol headers). For e.g. SCCP alone without MTP3, MTP2.... etc. etc.
I wanted an analyzer which could read these packets. For this I have modified Ethereal to suit my requirements.
If you think it is a worthwhile feature. I would like to contribute this. Yours truly, Navin Anand. The list of new files are: faketypes.h packet-fakelink.c packet-fakelink.h The modified files are: libpcap.c 407,413d406 < < /* < * 20 Added for the fake link type, required to dissect packets < * containing higher layer protocol payload without the lower layer < * protocol headers, e.g. pure TCP data without underlying IP. < */ < { 20, WTAP_ENCAP_FAKE_LINK }, packet-mtp3.c (as an e.g.) > #include "faketypes.h" > 494a497,498 > dissector_handle_t mtp3_handle; > 495a500,502 > > mtp3_handle = create_dissector_handle(dissect_mtp3, proto_mtp3); > dissector_add("fakelink.type", FAKETYPE_MTP3, mtp3_handle); packet-sccp.c (as an e.g.) 50a51,52 > #include "faketypes.h" > 2277a2280,2281 > > dissector_add("fakelink.type", FAKETYPE_SCCP, sccp_handle); wtap.h 129a130 > #define WTAP_ENCAP_FAKE_LINK 38 132c133 < #define WTAP_NUM_ENCAP_TYPES 38 ---> #define WTAP_NUM_ENCAP_TYPES 39
#ifndef __FAKETYPES_H__ #define __FAKETYPES_H__ #ifndef FAKETYPE_MTP3 #define FAKETYPE_MTP3 0x0001 #endif #ifndef FAKETYPE_SCCP #define FAKETYPE_SCCP 0x0002 #endif #endif
/* packet-fakelink.c * Routines for Fake link layer of Ethereal dissection * Copyright 2003, Navin Anand <navinanand@xxxxxxxxxxxxx> * Guidance by Martin Regner is acknowledged, thank you Martin Regner. * * $Id: packet-fakelink.c,v 1.74 2003/06/19 22:00:26 navin Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@xxxxxxxxxxxx> * Copyright 1998 Gerald Combs * * 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 2 * 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <glib.h> #ifdef NEED_SNPRINTF_H # include "snprintf.h" #endif #include <epan/packet.h> #include "packet-fakelink.h" #include "tap.h" #include "faketypes.h" /* Initialize the protocol and registered fields */ static int proto_fakelink = -1; static int hf_fakelink_type = -1; static int hf_fakelink_length = -1; /* Initialize the subtree pointers */ static gint ett_fakelink = -1; static gint ett_type = -1; static gint ett_length = -1; #define FAKELINK_HEADER_SIZE 4 #define DATA_OFFSET 4 static dissector_handle_t data_handle; static dissector_table_t fakelink_type_dissector_table; /* Code to actually dissect the packets */ static void dissect_fakelink(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { static fakelink_hdr fakelinkhdr; /* Set up structures needed to add the protocol subtree and manage it */ proto_item *ti = NULL; proto_tree *fakelink_tree = NULL; gint data_length; tvbuff_t *data_tvb; /* Make entries in Protocol column and Info column on summary display */ if (check_col(pinfo->cinfo, COL_PROTOCOL)) col_set_str(pinfo->cinfo, COL_PROTOCOL, "Fake link"); tvb_memcpy(tvb, &fakelinkhdr.type, 0, 2); tvb_memcpy(tvb, &fakelinkhdr.length, 2, 2); /* This field shows up as the "Info" column in the display */ if (check_col(pinfo->cinfo, COL_INFO)) col_set_str(pinfo->cinfo, COL_INFO, "Data for the fake link"); /* In the interest of speed, if "tree" is NULL, don't do any work not necessary to generate protocol tree items. */ if (tree) { /* NOTE: The offset and length values in the call to "proto_tree_add_item()" define what data bytes to highlight in the hex display window when the line in the protocol tree display corresponding to that item is selected. Supplying a length of -1 is the way to highlight all data from the offset to the end of the packet. */ /* create display subtree for the protocol */ ti = proto_tree_add_item(tree, proto_fakelink, tvb, 0, -1, TRUE); fakelink_tree = proto_item_add_subtree(ti, ett_fakelink); /* add an item to the subtree */ proto_tree_add_item(fakelink_tree, hf_fakelink_type, tvb, 0, 2, TRUE); proto_tree_add_item(fakelink_tree, hf_fakelink_length, tvb, 2, 2, TRUE); } data_length = tvb_length(tvb) - FAKELINK_HEADER_SIZE; data_tvb = tvb_new_subset(tvb, DATA_OFFSET, data_length, data_length); if (dissector_try_port(fakelink_type_dissector_table, fakelinkhdr.type, data_tvb, pinfo, tree)) return; call_dissector(data_handle, data_tvb, pinfo, tree); } /* Register the protocol with Ethereal */ /* this format is require because a script is used to build the C function that calls all the protocol registration. */ void proto_register_fakelink(void) { /* Setup list of header fields */ static hf_register_info hf[] = { { &hf_fakelink_type, { "Protocol type", "fakelink.type", FT_UINT16, BASE_HEX, VALS(faketype_vals), 0x0, "Protocol type", HFILL } }, { &hf_fakelink_length, { "Packet length", "fakelink.length", FT_UINT16, BASE_DEC, NULL, 0x0, "Packet length", HFILL } }, }; /* Setup protocol subtree array */ static gint *ett[] = { &ett_fakelink, &ett_type, &ett_length, }; /* Register the protocol name and description */ proto_fakelink = proto_register_protocol("Fake link layer of Ethereal", "Fake Link", "fakelink"); register_dissector("fakelink", dissect_fakelink, proto_fakelink); /* Required function calls to register the header fields and subtrees used */ proto_register_field_array(proto_fakelink, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); /* subdissector code */ fakelink_type_dissector_table = register_dissector_table("fakelink.type", "Protocol type", FT_UINT16, BASE_HEX); } /* This dissector uses sub-dissector registration, the registration routines for them is as given. This format is required because a script is used to find these routines and create the code that calls these routines. */ void proto_reg_handoff_fakelink(void) { dissector_handle_t fakelink_handle; data_handle = find_dissector("data"); fakelink_handle = create_dissector_handle(dissect_fakelink, proto_fakelink); dissector_add("wtap_encap", WTAP_ENCAP_FAKE_LINK, fakelink_handle); }
/* packet-fakelink.h * * $Id: packet-fakelink.h,v 1.74 2003/06/19 22:00:26 deniel Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@xxxxxxxxxxxx> * Copyright 1998 Gerald Combs * * 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 2 * 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __PACKET_FAKELINK_H__ #define __PACKET_FAKELINK_H__ #include "faketypes.h" typedef struct _fakelink_hdr { guint16 type; guint16 length; } fakelink_hdr; static void dissect_fakelink(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); const value_string faketype_vals[] = { {FAKETYPE_MTP3, "MTP3" }, {FAKETYPE_SCCP, "SCCP" }, {0, NULL } }; #endif
- Follow-Ups:
- Re: [Ethereal-dev] Support for pure protocol packets without underlying protocol data
- From: Jeff Morriss
- Re: [Ethereal-dev] Support for pure protocol packets without underlying protocol data
- From: Michael Tuexen
- Re: [Ethereal-dev] Support for pure protocol packets without underlying protocol data
- From: Guy Harris
- Re: [Ethereal-dev] Support for pure protocol packets without underlying protocol data
- Prev by Date: [Ethereal-dev] Patch to packet-isup, decode Parameter compabillity
- Next by Date: RE : [Ethereal-dev] about ethereal
- Previous by thread: Re: [Ethereal-dev] Patch to packet-isup, decode Parameter compabillity
- Next by thread: Re: [Ethereal-dev] Support for pure protocol packets without underlying protocol data
- Index(es):