X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2FpcapDecoder%2FtsharkDecoder.sh;h=816dea7d24b687190dbc7673e1b68f7bba647b60;hb=37d878ff070d97c2d116c78d3fc78b46c568991b;hp=93b29d42e1b160f2a7276628d277edec9685a72b;hpb=eb49b785a7e32e6259c7689f3861beed9b5a1a85;p=anna.git diff --git a/example/diameter/pcapDecoder/tsharkDecoder.sh b/example/diameter/pcapDecoder/tsharkDecoder.sh index 93b29d4..816dea7 100755 --- a/example/diameter/pcapDecoder/tsharkDecoder.sh +++ b/example/diameter/pcapDecoder/tsharkDecoder.sh @@ -38,7 +38,8 @@ # Decoder version using tshark tool # -# RESTRICTIONS: only TCP datagrams. Allow split diameter messages between frames, but not, several messages into single datagram. +# RESTRICTIONS: TCP & SCTP datagrams. Allow split diameter messages between frames, but not, several messages into single datagram. +# If sniffing fails, try to create the .hex and .metadata files manually (try 'tshark -nr input.pcap -Vx' and so on ...) ############# # VARIABLES # @@ -307,7 +308,7 @@ do group_array=( $(echo $group | sed 's/,/ /g') ) echo "Grouping frames ${group_array[*]} ..." for frame in ${group_array[@]}; do - cat $RESULTS_DIR/$frame.hex >> $tmpdir/diam.$group + cat $RESULTS_DIR/$frame.hex >> $tmpdir/diam.$group 2>/dev/null done cat $tmpdir/diam.$group | tr -d '\n' > $RESULTS_DIR/$frame.hex # Delete all frames except last one in the group: @@ -318,7 +319,11 @@ done #segments=( $(cat $tmpdir/diameter_frames | awk -F\| '{ if ($16 == "") print $1 }') ) segments=( $(echo $to_delete) ) echo "Deleting superfluous buffers & metadata (${segments[*]}) ..." -for s in ${segments[@]}; do rm $RESULTS_DIR/${s}.* ; done +for s in ${segments[@]}; do rm -f $RESULTS_DIR/${s}.* ; done + +# Basic checking: +ls $RESULTS_DIR/*.metadata >/dev/null 2>/dev/null +[ $? -ne 0 ] && { echo "No metadata generated !" ; exit 1 ; } # Detecting Session-Id values: grep ^sessionid= $RESULTS_DIR/*.metadata 2>/dev/null | cut -d= -f2- | sort -u > $RESULTS_DIR/session-ids @@ -353,5 +358,13 @@ then rm $RESULTS_DIR/.wanted $RESULTS_DIR/.all fi +# Purge frames with invalid metadata: +invalid=( $(grep -lw "^code=$" $RESULTS_DIR/*metadata) ) +for file in ${invalid[@]} +do + frm=$(basename $file | cut -d\. -f1) + rm $RESULTS_DIR/${frm}.* +done + _exit "Done!" 0