diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/Makefile.am | 1 | ||||
-rwxr-xr-x | tools/list_protos_in_cap.sh | 76 |
2 files changed, 77 insertions, 0 deletions
diff --git a/tools/Makefile.am b/tools/Makefile.am index b7835b125c..50b7c62dae 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -97,6 +97,7 @@ EXTRA_DIST = \ idl2wrs.sh \ idl2wrs.sh.in \ lex.py \ + list_protos_in_cap.sh \ Makefile.nmake \ make-dissector-reg \ make-dissector-reg.py \ diff --git a/tools/list_protos_in_cap.sh b/tools/list_protos_in_cap.sh new file mode 100755 index 0000000000..76cabb7c21 --- /dev/null +++ b/tools/list_protos_in_cap.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# +# $Id$ +# +# List the protocols (dissectors) used in capture file(s) +# +# This script extracts the protocol names contained in a given capture file. +# This is useful for generating a "database" (flat file :-)) of in what file +# a given protocol can be found. +# +# Output consists of the file name followed by the protocols, for example: +# /path/to/the/file.pcap eth ip sctp + +# Directory containing binaries. Default current directory. +BIN_DIR=_build + +# Tweak the following to your liking. Editcap must support "-E". +TSHARK="$BIN_DIR/tshark" +CAPINFOS="$BIN_DIR/capinfos" + +if [ "$BIN_DIR" = "." ]; then + export WIRESHARK_RUN_FROM_BUILD_DIRECTORY= +fi + +NOTFOUND=0 +for i in "$TSHARK" "$CAPINFOS" +do + if [ ! -x $i ] + then + echo "Couldn't find $i" + NOTFOUND=1 + fi +done +if [ $NOTFOUND -eq 1 ] +then + exit 1 +fi + +# Make sure we have at least one file +FOUND=0 +for CF in "$@" +do + if [ "$OSTYPE" == "cygwin" ] + then + CF=`cygpath --windows "$CF"` + fi + "$CAPINFOS" "$CF" > /dev/null 2>&1 && FOUND=1 + if [ $FOUND -eq 1 ] + then + break + fi +done + +if [ $FOUND -eq 0 ] ; then + cat <<FIN +Error: No valid capture files found. + +Usage: `basename $0` capture file 1 [capture file 2]... +FIN + exit 1 +fi + +for CF in "$@" ; do + "$CAPINFOS" "$CF" > /dev/null + if [ "$OSTYPE" == "cygwin" ] ; then + CF=`cygpath --windows "$CF"` + fi + printf "$CF " + + # Extract the protocol names. + $TSHARK -T fields -eframe.protocols -nr "$CF" 2>/dev/null | sed 's/:/\n/g' \ + | sort -u | tr '\n' ' ' + + printf "\n" +done + |