You could look at using the etapp for exported pdu and add tags for
metadata then just pas the protocol data to a suitable dussector.
/Anders

Den tis 6 maj 2025 04:13Michael Mann via Wireshark-dev <
wireshark-dev@wireshark.org> skrev:

> This is all very helpful (especially to search the mailing list archives
> in the future).
>
> Some clarifications/follow ups:
> 1. I was not looking to write the file back in the original (text based)
> format.  I was perfectly fine with "open as .trc file, save as .pcap (or
> .pcapng)" and I thought if I didn't provide write function callbacks in the
> wiretap, that's how Wireshark would behave.  To me there isn't a (strong)
> need to "write" back to the original file format, the reading conversion is
> just to take advantage of Wireshark's superior dissection/filtering for
> analysis.  And having it being done "inline" in a single step within
> Wireshark instead of two steps - text2pcap derivation then Wireshark
> (especially when you may not need an actual pcap file, just the data loaded
> in memory for analysis)
>
> 2. You are correct that I was conflating file formats and metadata as far
> as the layers between wiretap and dissection.  If WTAP_ENCAP_SOCKETCAN is
> used, then its "metadata format" needs to be followed and that's what I
> find a little clunky after looking at the dissection in Wireshark.  Here, I
> see wiretap as producing a "SocketCAN record", and I thought producing a
> "pcap or pcapng record" would be better.  I thought the wiretap
> functionality I was writing was to "massage" into an existing "wtap_encap"
> format, and I want to shoot for a pcap or pcapng record over SocketCAN to
> take advantage of the LINKTYPE_LINUX_SLL link-layer format/dissection.
>
> 3. Apparently text2pcap was refactored a few times since I wrote my
> "derived" applications. The most notable being in December 2021 when it was
> converted to use wtap_dump, which replaced all of the pcapio functions my
> applications were using. To me the "algorithm" text2pcap used to be (and
> my applications stayed with because I didn't have a reason to change them):
> a) write_file_header() that uses pcapng_write_section_header_block() and
> pcapng_write_interface_description_block()
> b) parse text data out of the file for packets and create them with
> pcapng_write_enhanced_packet_block()
> c) write_file_trailer that uses pcapng_write_interface_statistics_block()
> to provides statistics of the packet data read
>
> What I was hoping for was a wiretap interface with a similar algorithm
> where just "b" needed to be adjusted as needed for slight differences in
> text formats (within the wth->subtype_read callback) and may not need a
> lexical scanner like text2pcap has.  Looking at the current 
> ui/text_import*.[chl],
> it seems to focus on actual files and not "records" like I would want for
> the PEAK wiretap interface.
>
>
>
> On Monday, May 5, 2025 at 01:43:19 PM EDT, Guy Harris <ghar...@sonic.net>
> wrote:
>
>
> On May 5, 2025, at 8:24 AM, Michael Mann via Wireshark-dev <
> wireshark-dev@wireshark.org> wrote:
>
> > There have been several times where I've been given a simple, text-based
> capture file for Serial or CAN communications.  My (quick and dirty)
> solution has been to write a text2pcap derived application to convert the
> file to pcapng format and then view it Wireshark.  The packet dissection
> support is usually already there, but I have also supplemented with plugins
> when needed.
> >
> > However, https://gitlab.com/wireshark/wireshark/-/merge_requests/18894
> has shown me the "right" way to handle it - and that's using wiretap. The
> packet data comes from a CAN bus, so the original thought was to use the
> SocketCAN file format,
>
> What is "the SocketCAN file format"?
>
> > but WTAP_ENCAP_SOCKETCAN is a little clunky and I think I'd prefer to
> use the pcapng format
>
> WTAP_ENCAP_SOCKETCAN is a Wiretap link-layer encapsulation, and is used
> for several file formats, including...
>
> ...pcap and pcapng format with the LINKTYPE_CAN_SOCKETCAN link-layer type
> value:
>
>     https://www.tcpdump.org/linktypes/LINKTYPE_CAN_SOCKETCAN.html
>
> and, in fact, WTAP_ENCAP_SOCKETCAN was *originally created* for
> LINKTYPE_CAN_SOCKETCAN. The most common file types with
> WTAP_ENCAP_SOCKETCAN are probably... pcap and pcapng.
>
> > (similar to my text2pcap applications) to pipe it through "better"
> dissection tables (sll.ltype).
>
> OK, *that's the LINKTYPE_LINUX_SLL link-layer type value for pcap and
> pcapng:
>
>     https://www.tcpdump.org/linktypes/LINKTYPE_LINUX_SLL.html
>
> whose primary disadvantage relative to LINKTYPE_CAN_SOCKETCAN is that the
> packet size is significantly larger, with is why it's *not* the default for
> capturing on CAN bus devices on Linux:
>
>     https://github.com/the-tcpdump-group/libpcap/issues/1052
>
> > The file format also contains "non-packet data" that I would like to
> eventually convert into other pcapng block types.
>
> ...and convert those block types *back* to the PEAK CAN file format when
> *writing* the file.
>
> libwiretap provides a layer of abstraction above the file formats it
> supports; it can handle reading and writing file formats that don't map to
> pcap or pcapng in a simple fashion.
>
> > I looked around a little, but I didn't see any obvious examples in
> wiretap of how to easily provide a pcapng record.
>
> It's not intended to provide pcap or pcapng or snoop or Microsoft Network
> Monitor or BLF or ERF or AIX i-trace or... records.
>
> It *does* have a mechanism for producing "file-format-specific" record
> types - REC_TYPE_FT_SPECIFIC_EVENT and REC_TYPE_FT_SPECIFIC_REPORT.
>
> It *also* has a mechanism for producing pcapng custom blocks -
> REC_TYPE_CUSTOM_BLOCK.  *Those* have the advantage that, if the user wants
> to save a *non*-pcap/pcapng format into a pcapng file, it can be done more
> easily.  What it *does* require is assigning *some* Private Enterprise
> Number for a given type:
>
>     https://www.iana.org/assignments/enterprise-numbers/
>
> If the organization that owns the file format has a PEN, *and* they're
> willing to "own" pcapng custom blocks with that PEN, that would be one
> way.  The custom block should probably begin with a "custom block type for
> this PEN" field, so that more than one type of custom block can be
> supported. The organization would manage the space of custom block types.
>
> On the other hand, we could use *the Wireshark Foundation's* PEN:
>
>     https://www.iana.org/assignments/enterprise-numbers/?q=Wireshark
>
> and manage the custom block types ourselves.
>
> > pcapng.c does its own processing and is a bit complex compared to the
> APIs used in text2pcap.
>
> The "pcap" in "text2pcap" refers to the pcap file format:
>
>
> https://ietf-opsawg-wg.github.io/draft-ietf-opsawg-pcap/draft-ietf-opsawg-pcap.html
>
> which is a bit less complex than the pcapng file format:
>
>
> https://ietf-opsawg-wg.github.io/draft-ietf-opsawg-pcap/draft-ietf-opsawg-pcapng.html
>
> so, yes, APIs to write out pcapng files will be a bit complex compared to
> APIs use to write pcap files.
>
> > Looking at other wiretap examples, they seem to have a "file dissection
> layer" in epan/dissectors that corresponds to the wiretap handling (linking
> to "wtap_encap" table) before data is passed to a different dissection
> table for "packet dissection".
>
> That's for non-pcap/pcapng files that have their own stuff that count as
> metadata; wiretap provides the metadata as a header for the packet data.
>
> This should perhaps be done by having the wiretap read APIs provide, and
> the wiretap write APIs accept, separate blobs of "file type metadata" and
> "packet data", so that, for example, an HP-UX nettl file would provide the
> nettl metadata separately from the packet data, and the WTAP_ENCAP_ type
> would be the type for the packet data.
>
> The "file type metadata" would be indicated by the file type.  File types
> are *not* identified by fixed assigned numbers (except for pcap and
> pcapng), as code using wiretap is, in general, *not* supposed to do
> specific things for specific file types - wiretap should provide general
> indications such as "does this file support multiple link-layer types per
> file?", so that the code using wiretap doesn't need to be updated to handle
> new file types.  The way to handle *that* is to have either built-in
> modules or plugins for that file format, providing both wiretap code (which
> would be handed the file type value when it registers its file type) and
> file type metadata dissectors (which would register for that in a "file
> type metadata" dissector.
>
> That would also be used to register to handle a particular type of
> REC_TYPE_FT_SPECIFIC_EVENT or REC_TYPE_FT_SPECIFIC_REPORT.
>
> > Is pcapng.c the only source of what I'll have to look at as an
> "example"?  Can anyone provide more pointers on my desire to have
> "text2pcap functionality in wiretap",
>
> "text2pcap functionality" is "converting a hex dump text file to a capture
> file". In some sense, that functionality is already *in* several wiretap
> modules for file format that are text files.
>
> This is independent of "handling file type specific information", which
> could be done for text *or* binary formats.
>
>
> > to make it easier to provide wiretaps for future (simple) text-based
> packet data.
>
>
> The "text2pcap functionality" is currently in ui/text_import*.[chl],
> because it's used in *two* places - text2pcap and Wireshark's "import a
> text file" facility.
>
> It could, for example, be moved into wsutil, or into its own text_import
> library, to be more conveniently used by text2pcap and Wireshark *and*
> wiretap.
>
>
> _______________________________________________
> Wireshark-dev mailing list -- wireshark-dev@wireshark.org
> To unsubscribe send an email to wireshark-dev-le...@wireshark.org
>
_______________________________________________
Wireshark-dev mailing list -- wireshark-dev@wireshark.org
To unsubscribe send an email to wireshark-dev-le...@wireshark.org

Reply via email to