Древо AS(set/num)

Когда работал у одного крупного оператора, очень часто нужно было знать, что за AS-set и ASNUM входят в состав AS-set, и какие префиксы там обитают. Для этого написал на баше скрипт:

#!/bin/bash

#as-set or asnum (AS-SET/ASNUM)
PARAM=$1
#network-(net)
NET=""
NET=$2

T0=`echo $PARAM | grep -P "AS\-"`
T1=`echo $PARAM | grep -P "AS\d"`
REZ="rez.log"
A=">"
TMP="/tmp/"

#function
run () {
        whois $PARAM |  awk '/members\:/ {print $2}' > $TMP$PARAM
        echo $A $PARAM >> $REZ
        cat $TMP$PARAM | while read PARAM
        do
                T0=`echo $PARAM | grep -P "[aA][sS]\-"`
                T1=`echo $PARAM | grep -P "[aA][sS]\d"`
                if [ -n "$T0" ]; then TYPE="ASSET"; fi
                if [ -n "$T1" ]; then TYPE="ASNUM"; fi
                if [ "$TYPE" == "ASSET" ]
                then
                        A="-"$A
                        echo "" >> $REZ
                        run $PARAM $A
                else
                        echo "-"$A $PARAM >> $REZ
                        if [ "$NET" == "net" ]; then
                                whois -r -i origin $PARAM | awk '/route:/ {print " "$2}' >> $REZ
                                echo "" >> $REZ
                        fi
                fi
        done
        A=`echo $A | sed 's/^-//'`
        echo "" >> $REZ
        rm -f $TMP$PARAM
}

#main
echo `date` > $REZ
if [ -n "$T0" ]; then TYPE="ASSET"; fi
if [ -n "$T1" ]; then TYPE="ASNUM"; fi
if [ -z "$PARAM" ]
then
        echo "Error! No parameter found!"
        exit
fi
if [ -z "$TYPE" ]
then
        echo "Error! Bad parameter!"
        exit
fi
echo "TYPE: $TYPE" >> $REZ
echo "PARAM: $PARAM" >> $REZ
echo "" >> $REZ
echo "-----Result-----" >> $REZ
echo "" >> $REZ
if [ "$TYPE" == "ASSET" ]
then
        run $PARAM $A
else [ "$TYPE" == "ASNUM" ]
        if [ "$NET" == "net" ]; then
                whois -r -i origin $PARAM | awk '/route:/ {print " "$2}' >> $REZ
                echo "" >> $REZ
        fi
fi

 

скрипт запускается с указанием или ASNUM или AS-set. По типу надписи, скрипт сам определяет, что введено и начинает анализ. Есть дополнительный параметр — net, добавляет информацию о префиксах.

Для работы скрипта нужен whois версии не ниже 5.

Примечателен этот скрипт тем, что тут задействована рекурсия на баше:) В целом скрипт работе без нареканий. для оптимизации, думаю часть когда написать на перле, но не к спеху.

Пример работы:

wolf4ara@main-server:~$ sudo ./sc/as_full_info.sh AS-NNOV
wolf4ara@main-server:~$ cat rez.log
Срд Апр 3 11:41:41 YEKT 2013
TYPE: ASSET
PARAM: AS-NNOV

-----Result-----

> AS-NNOV
-> AS42682
-> AS197275
-> AS57104
-> AS12768
-> AS197733
-> AS199010
-> AS59596
-> AS57193

-> AS-MEGANN
--> AS48733
--> AS47614
--> AS57193
--> AS197733
--> AS34892
--> AS58240
--> AS197275
--> AS57045
--> AS57308
--> AS59535

--> as-ssp
---> AS61229
---> AS57045
---> AS57193
---> as198932

--> AS51221

с сетями:

wolf4ara@main-server:~$ sudo ./sc/as_full_info.sh AS61229 net
wolf4ara@main-server:~$ cat rez.log
Срд Апр 3 11:43:09 YEKT 2013
TYPE: ASNUM
PARAM: AS61229

-----Result-----

 95.182.78.0/24

Будут замечания — пишите:)