diff options
author | Francois-Xavier Le Bail <devel.fx.lebail@orange.fr> | 2020-05-09 19:32:05 +0200 |
---|---|---|
committer | Francois-Xavier Le Bail <devel.fx.lebail@orange.fr> | 2020-05-10 11:05:59 +0200 |
commit | 25687e1a312a3bb63a6e8d7f0af0210a615e24a8 (patch) | |
tree | bd625058a963602f9571587f5345e58f30b07f43 | |
parent | 2b5ab9ae73292ee9e0cc01b86e127d9079a78fb2 (diff) | |
download | tcpdump-25687e1a312a3bb63a6e8d7f0af0210a615e24a8.tar.gz |
Print packets for unsupported link-layer protocols in hexadecimal/ASCII
This avoids to get only:
tcpdump: packet printing is not supported for link type XYZ: use -w
The default printing is like:
18:45:52.723872 UNSUPPORTED
0x0000: 001f 0000 0540 6078 725d 586d 4d66 4671 .....@`xr]XmMfFq
0x0010: 6d58 4d5c 7159 5f71 565c 556c 4e71 7171 mXM\qY_qV\UlNqqq
0x0020: 7171 7171 7171 7171 7171 7171 7171 5180 qqqqqqqqqqqqqqQ.
0x0030: 7f7f ..
18:45:52.755995 UNSUPPORTED
0x0000: 001f 0000 0540 6043 7851 807f 7f .....@`CxQ...
[...]
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | Makefile.in | 1 | ||||
-rw-r--r-- | netdissect.h | 1 | ||||
-rw-r--r-- | print-unsupported.c | 34 | ||||
-rw-r--r-- | print.c | 13 |
5 files changed, 39 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 832f20c7..4ea6deca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1077,6 +1077,7 @@ set(NETDISSECT_SOURCE_LIST_C print-token.c print-udld.c print-udp.c + print-unsupported.c print-usb.c print-vjc.c print-vqp.c diff --git a/Makefile.in b/Makefile.in index 0fe4d729..25e43ab6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -233,6 +233,7 @@ LIBNETDISSECT_SRC=\ print-token.c \ print-udld.c \ print-udp.c \ + print-unsupported.c \ print-usb.c \ print-vjc.c \ print-vqp.c \ diff --git a/netdissect.h b/netdissect.h index 65a0d987..1c83361e 100644 --- a/netdissect.h +++ b/netdissect.h @@ -524,6 +524,7 @@ extern u_int sll2_if_print IF_PRINTER_ARGS; extern void sunatm_if_print IF_PRINTER_ARGS; extern void symantec_if_print IF_PRINTER_ARGS; extern u_int token_if_print IF_PRINTER_ARGS; +extern void unsupported_if_print IF_PRINTER_ARGS; extern void usb_linux_48_byte_if_print IF_PRINTER_ARGS; extern void usb_linux_64_byte_if_print IF_PRINTER_ARGS; extern u_int vsock_if_print IF_PRINTER_ARGS; diff --git a/print-unsupported.c b/print-unsupported.c new file mode 100644 index 00000000..009cf6f9 --- /dev/null +++ b/print-unsupported.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020 The TCPDUMP project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that: (1) source code + * distributions retain the above copyright notice and this paragraph + * in its entirety, and (2) distributions including binary code include + * the above copyright notice and this paragraph in its entirety in + * the documentation or other materials provided with the distribution. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND + * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT + * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE. + */ + +/* \summary: unsupported link-layer protocols printer */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "netdissect-stdinc.h" + +#include "netdissect.h" + +void +unsupported_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, + const u_char *p) +{ + ndo->ndo_protocol = "unsupported"; + nd_print_protocol_caps(ndo); + hex_and_ascii_print(ndo, "\n\t", p, h->caplen); +} @@ -379,20 +379,11 @@ has_printer(int type) if_printer_t get_if_printer(netdissect_options *ndo, int type) { - const char *dltname; if_printer_t printer; printer = lookup_printer(ndo, type); - if (printer.printer == NULL) { - dltname = pcap_datalink_val_to_name(type); - if (dltname != NULL) - (*ndo->ndo_error)(ndo, S_ERR_ND_NO_PRINTER, - "packet printing is not supported for link type %s: use -w", - dltname); - else - (*ndo->ndo_error)(ndo, S_ERR_ND_NO_PRINTER, - "packet printing is not supported for link type %d: use -w", type); - } + if (printer.printer == NULL) + printer.void_printer = unsupported_if_print; return printer; } |