Attached is the shell script "ipflowsearch", which lets you pull out
flow data from your flow-tools tree by IP address or subnet with a
minimum of intellectual effort.

Feel free to toss this into the contrib section of the current flow-tools
distribution, or anywhere else it might be useful.

        -- Ed
#!/bin/sh

set -u
set -e

USAGE="Usage: $0 flowdir-top ip-address[/mask] [...]"

# EDIT THIS LINE - use a default dir with lots of free space
export flowtemp=${TMPDIR:-/logs/tmp}

# ipflowsearch - run flow-cat and flow-filter on a flow-tools data
# tree, filtering out traffic for the requested IP address(es).

# ipflowsearch was written by Ed Ravin <[email protected]>, and is
# made available to the public by courtesy of PANIX Public Access Networks
# ( http://www.panix.com ).  License is GPL.


export TMPDIR=$flowtemp # so mktemp will work properly

if [ ! -d $flowtemp ]
then
        echo "$0: no such directory: $flowtemp"
        exit 23
fi

if [ "${DEBUG:-no}" = YES ]
then
        set -x
fi

convert_ip_slash() {

        slashpart=${1##*/}
        if [ "$slashpart" != $1 ]
        then
                ippart=${1%%/*}
                case $slashpart in
                32)     wildcard=;;
                31)     wildcard=0.0.0.1;;
                30)     wildcard=0.0.0.3;;
                29)     wildcard=0.0.0.7;;
                28)     wildcard=0.0.0.15;;
                27)     wildcard=0.0.0.31;;
                26)     wildcard=0.0.0.63;;
                25)     wildcard=0.0.0.127;;
                24)     wildcard=0.0.0.255;;
                23)     wildcard=0.0.1.255;;
                22)     wildcard=0.0.3.255;;
                21)     wildcard=0.0.7.255;;
                20)     wildcard=0.0.15.255;;
                19)     wildcard=0.0.31.255;;
                18)     wildcard=0.0.63.255;;
                17)     wildcard=0.0.127.255;;
                16)     wildcard=0.0.255.255;;
                15)     wildcard=0.1.255.255;;
                14)     wildcard=0.3.255.255;;
                13)     wildcard=0.7.255.255;;
                12)     wildcard=0.15.255.255;;
                11)     wildcard=0.31.255.255;;
                10)     wildcard=0.63.255.255;;
                9)      wildcard=0.127.255.255;;
                8)      wildcard=0.255.255.255;;
                7)      wildcard=1.255.255.255;;
                6)      wildcard=3.255.255.255;;
                5)      wildcard=7.255.255.255;;
                4)      wildcard=15.255.255.255;;
                3)      wildcard=31.255.255.255;;
                2)      wildcard=63.255.255.255;;
                1)      wildcard=127.255.255.255;;
                *)              echo "Unrecognized/unsupported mask: 
$slashpart" 1>&2; exit 1;;
                esac
                echo $ippart $wildcard
        else
                echo $1
        fi
}



# search flow logs for all traffic from specified IP address(es)

flowdirtop=${1:?$USAGE}
shift
ipaddresses=${*:?$USAGE}

# create the flow-filter
tempacl=$(mktemp -t ipsearch.acl)

if [ ! -f $tempacl ]
then
        echo "$0: cannot create temp ACL file $tempacl"
        exit 24
fi

trap 'rm -f $tempacl' 0

# datestamp for output file
now=$(date +%Y%m%d-%H%M%S)

filestr=$(echo "$*" | sed -e 's,[ /],_,g')

for ip in $ipaddresses
do
        ipacl=$(convert_ip_slash $ip)
        echo "ip access-list standard ipwanted permit $ipacl"
done > $tempacl

outputfile=$flowtemp/ipsearch-$filestr-$now.flow

flow-cat $flowdirtop |
        flow-filter -f $tempacl -S ipwanted -o -D ipwanted \
                > $outputfile

echo "$0: output file is $outputfile"
_______________________________________________
Flow-tools mailing list
[email protected]
http://mailman.splintered.net/mailman/listinfo/flow-tools

Reply via email to