Wireshark-dev: Re: [Wireshark-dev] Register dissector to MAC address
From: "Michael A. McCartney" <mccart@xxxxxxxxxxxxxxxxxx>
Date: Mon, 17 Dec 2007 20:13:39 -0600
Chris, I used to hack into packet-eth.c until I learned a better way using heuristic dissector instead and leave packet-eth.c alone. Not sure why you had difficulties but this is what I did and it works fine. And using the if(...), one can be selective on MAC address. static gboolean dissect_<name>_heur (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { /* * Is a <name or target> ethernet header? */ if( tvb_get_guint8(tvb, 1) == 0x00 && tvb_get_guint8(tvb, 2) == 0x00 && tvb_get_guint8(tvb, 3) == 0x00 && ... etc ... tvb_get_guint8(tvb,11) == 0x00 && tvb_get_guint8(tvb,12) == 0x00 ) { /* dissect <name> frame */ dissect_<name>(tvb, pinfo, tree); return TRUE; } else { /* not a <name> ethernet packet header */ return FALSE; } } And in proto_reg_handoff_<name> had this line... heur_dissector_add("eth", dissect_<name>_heur, proto_<name>); Of course, doing this way, you need to dissect the whole ethernet frame yourself including the MACs. Thanks-Mike Maynard, Chris wrote: > At first glance, packet-eth.c seems to have heuristic support, but it doesn't appear to work, at least not how I expected it to. For example, originally for the WOL dissector, I registered as I do for UDP, namely: > heur_dissector_add("eth", dissect_wol, proto_wol); > > But registering it that way didn't work for me, so it's been changed to: > dissector_add("ethertype", ETHERTYPE_WOL, wol_handle); > > I didn't dig too deeply into why it failed since I had a reasonable alternative, but I suppose I should have. It now seems to me to be a bug in packet-eth.c, but I'm not entirely sure, based on the comments in the code. > > First, compare the way a dissector like packet-udp.c tries the heuristic dissectors, using the "next_tvb": > next_tvb = tvb_new_subset(tvb, offset, len, reported_len); > if (dissector_try_heuristic(heur_subdissector_list, next_tvb, pinfo, tree)) > > Now look at how packet-eth.c does it: > if (dissector_try_heuristic(heur_subdissector_list, tvb, pinfo, parent_tree)) > goto end_of_eth; > > Notice that there's no "next_tvb". I assumed that this was intentional when I looked at it before, but now I'm not so sure. A bug? It now sure looks like it to me. I couldn't find any other dissectors that try to heuristically register to "eth" as I tried above. Perhaps because it doesn't work? If it is a bug, then once that's corrected, then that would be the better way to register both WOL and the original poster's dissector - heuristically. > > - Chris > > ________________________________ > > From: wireshark-dev-bounces@xxxxxxxxxxxxx on behalf of Stephen Fisher > Sent: Mon 11/12/2007 12:50 PM > To: Developer support list for Wireshark > Subject: Re: [Wireshark-dev] Register dissector to MAC address > > > > On Mon, Nov 12, 2007 at 12:37:10PM -0500, Maynard, Chris wrote: > > >> Can anyone think of a reason NOT to add heuristic dissection support >> to packet-eth.c? Or does anyone have a better/alternate way to solve >> this? >> > > My first thought is that the original poster's dissector could be a > heuristic that checks against the MAC address when deciding whether to > acccept the packet or not. Does this need changes to packet-eth.c? I'm > not sure, but could find out by researching the code a bit. > > > Steve > > _______________________________________________ > Wireshark-dev mailing list > Wireshark-dev@xxxxxxxxxxxxx > http://www.wireshark.org/mailman/listinfo/wireshark-dev > > > > > > ----------------------------------------- > This email may contain confidential and privileged material for the > sole use of the intended recipient(s). Any review, use, retention, > distribution or disclosure by others is strictly prohibited. If you > are not the intended recipient (or authorized to receive for the > recipient), please contact the sender by reply email and delete all > copies of this message. Also, email is susceptible to data > corruption, interception, tampering, unauthorized amendment and > viruses. We only send and receive emails on the basis that we are > not liable for any such corruption, interception, tampering, > amendment or viruses or any consequence thereof. > ------------------------------------------------------------------------ > > _______________________________________________ > Wireshark-dev mailing list > Wireshark-dev@xxxxxxxxxxxxx > http://www.wireshark.org/mailman/listinfo/wireshark-dev >
- Follow-Ups:
- Re: [Wireshark-dev] Register dissector to MAC address
- From: Maynard, Chris
- Re: [Wireshark-dev] Register dissector to MAC address
- Prev by Date: Re: [Wireshark-dev] Please apply 23907 to 0.99.7 (array overflow)
- Next by Date: Re: [Wireshark-dev] Register dissector to MAC address
- Previous by thread: Re: [Wireshark-dev] Please apply 23907 to 0.99.7 (array overflow)
- Next by thread: Re: [Wireshark-dev] Register dissector to MAC address
- Index(es):