#!/bin/bash -f ###################################################################### # Artemis packet dumper tester, (C) 2015-2019 Nosey Nick Waterman, # https://noseynick.org/artemis/ # All wrong righted, all rights reserved. Licensed under thev GNU # Affero General Public License v3.0 https://www.gnu.org/licenses/agpl.txt # with Commons Clause https://commonsclause.com/ v1.0 ###################################################################### NORUN=''; ARGS='' if [ "$1" = "--norun" ]; then NORUN=$1; shift; fi while [[ "$1" =~ ^-- ]]; do ARGS="$ARGS $1"; shift; done [ "$1" -a -f "$1" ] || { echo "USAGE: $0 [--norun] capture.gz" echo " Will feed a gzipped artemis packet dump through ./parser to code," echo " back to binary, and back to code again [except with --norun]," echo " compare diffs, and produce a bunch of stats." exit 1 } for IN in "$@"; do case "$IN" in *.gz) CAT=zcat ;; *.xz) CAT=xzcat ;; *) CAT=cat ;; esac # will be used by "wc" and "diff" etc if [ "$PROTOVERSION" ]; then echo "#### PROTOVERSION=$PROTOVERSION ./parser.pl$ARGS $IN" else echo "####" "./parser.pl$ARGS $IN" fi [ "$CAT" = "cat" ] || wc -c $IN | sed -e 's|[^ 0-9].*| COMPRESSED|' ISIZE=$($CAT $IN | wc -c) ; echo "$ISIZE BYTES IN" # DEADBEEF to perl... ./parser.pl $ARGS --objstats $IN > $IN.pl if [ "$NORUN" ]; then ./totals.pl $IN.pl | egrep -v '_TODO|BAD:' echo "NOT re-run back to binary" rm -f $IN.pl continue fi # ... back to DEADBEEF... if [ $ISIZE -gt 100000000 ] then ./chunk_parser.pl $IN.pl > $IN.op else perl $IN.pl > $IN.op ; fi OSIZE=$(cat $IN.op | wc -c) ; # echo "$OSIZE BYTES OUT" if [ $ISIZE -ne $OSIZE ]; then echo '### SIZES DIFFER!'; fi ./totals.pl $IN.pl if $CAT $IN | cmp - $IN.op ; then echo "NO DIFFS" else echo "DIFFS:" ./parser.pl $ARGS --objstats $IN.op | diff -u $IN.pl - | head -200 ./deadbeef2hex.pl $IN.op > $IN.out ./deadbeef2hex.pl $IN | diff -u - $IN.out | head -200 fi rm -f $IN.pl $IN.op $IN.out done