Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info
#!/bin/bash

#  set -e   ?


# todo
# 1. сделать работу скрипта без сканированияя сети. только генерацию по файлу от предыдущего скана. при этом не удалять файл скана
# 2. отправка результата по почте для оценки админом.
# 3. переделка на сканирование telnet\ssh а не пропинговкой.
# 4. добавление найденных устройств в бд.
#  nmap -sP -iL networkscan.txt
export LANG="ru_RU.UTF-8"
export LOCALE="ru_RU"

BASEDIR=/opt/scripts/discoverynet


# проверяем или по телнету или по пингу.
# по пингу должно быть быстрее   /16

NMAPBIN="/usr/bin/nmap -sP -n -iL $BASEDIR/networkscan.txt -oG  $BASEDIR/out.hostsscan.txt"
# NMAPBIN="/usr/bin/nmap -sP -oG \"$BASEDIR/out.hostsscan.txt\""

echo $NMAPBIN

# заносим параметры по default для формирования csv файла
#name=address
is_managed="True"
administrative_domain="default"
activator="activatormain"
collector=""
profile_name="Generic.Host"
object_profile="default"
description=""
auth_profile=""
scheme="0"
address=""
port=""
user="admin"
password="admin"
super_password="admin"
remote_path=""
trap_source_ip=""
trap_community=""
snmp_ro="public"
snmp_rw="public"
vc_domain=""
vrf=""
termination_group=""
service_terminator=""
shape="Cisco/router"
config_filter_rule=""
config_diff_filter_rule=""
config_validation_rule=""
max_scripts="5"
tags="autoadd"

headcvs="name,is_managed,administrative_domain,activator,collector,profile_name,object_profile,description,auth_profile,scheme,address,port,user,password,super_password,remote_path,trap_source_ip,trap_community,snmp_ro,snmp_rw,vc_domain,vrf,termination_group,service_terminator,shape,config_filter_rule,config_diff_filter_rule,config_validation_rule,max_scripts,tags"


# выполняем сканирование сети.
# в качестве параметра берём диапазон переданный из консоли.
if [ "$1" = "scan" ]
    then
    # очищаем вывод от предыдущего запуска
    cd $BASEDIR && rm result* out*

    # сканируем сеть
    $NMAPBIN
fi

# читаем построчно получившийся файл и начинаем формировать файл для загрузки в бд.

while read -r line

do
    profile_name="Generic.Host"
    object_profile="default"
    trap_source_ip=""
    snmpcheckresult=""
    name=$line
#        echo $name
    address=`echo $line | grep Host | grep "Status: Up" | awk '{print $2}'`

# проверяем что вывод ненулевой и проверяем есть ли оно в бд
    if [ -n "$address" ]
        then
        $BASEDIR/sql.sh $address &
    
    fi
    echo -e "\n\n"
done < $BASEDIR/out.hostsscan.txt

# проверяем есть ли новые хосты. если есть то отправляем почту и добавляем в бд
# склеиваем CVS из "шапки" и "тела"

sleep 60


if [ -a $BASEDIR/out.hostsadd.txt ]
    then
    echo $headcvs > $BASEDIR/result.hostsadd.csv
    cat out.hostsadd.txt >> $BASEDIR/result.hostsadd.csv
    
    # удаляем из БД дубликаты
    /opt/scripts/maintenance.fix/cron.sh

    # добавление хостов.
    cd /opt/noc && ./noc csv-import sa.managedobject -r skip -v 3 $BASEDIR/result.hostsadd.csv
    RETVAL=$?
    
    if [ $RETVAL -ne 0 ]
        then
        echo "error import"
        /bin/mail -S sendcharsets=utf-8 -s "Ошибка импорта данных" -a $BASEDIR/result.hostsadd.csv root@example.com < $BASEDIR/result.hostsadd.csv
    fi
                                
    
    # отправка почты
    /bin/mail -S sendcharsets=utf-8 -s "Найденный новые хосты СПД" -a $BASEDIR/result.hostsadd.csv root@example.com < $BASEDIR/result.hostsadd.csv
fi

# переносим файл в архив.

mv $BASEDIR/result.hostsadd.csv $BASEDIR/data/`/bin/date +\%Y\%m\%d`.csv


 

Info
titlesql.sh

#!/bin/bash

 

export LANG="ru_RU.UTF-8"

export LOCALE="ru_RU"

 

BASEDIR=/opt/scripts/discoverynet

 

# заносим параметры по default для формирования csv файла

#name=address

is_managed="True"

administrative_domain="default"

activator="activatormain"

collector=""

profile_name="Generic.Host"

object_profile="default"

description=""

auth_profile=""

scheme="0"

address=""

port=""

user="admin"

password="admin"

super_password="admin"

remote_path=""

trap_source_ip=""

trap_community=""

snmp_ro="public"

snmp_rw="public"

vc_domain=""

vrf=""

termination_group=""

service_terminator=""

shape="Cisco/router"

config_filter_rule=""

config_diff_filter_rule=""

config_validation_rule=""

max_scripts="5"

tags="autoadd"

 

headcvs="name,is_managed,administrative_domain,activator,collector,profile_name,object_profile,description,auth_profile,scheme,address,port,user,password,super_password,remote_path,trap_source_ip,trap_community,snmp_ro,snmp_rw,vc_domain,vrf,termination_group,service_terminator,shape,config_filter_rule,config_diff_filter_rule,config_validation_rule,max_scripts,tags"

 

 

 

address=$1

 

 

    SQLQUERY="SELECT address FROM sa_managedobject where address = '$address' and name not like 'wiping-%' limit 1 ;"

    SQLRESULT=`echo $SQLQUERY | psql -U noc --dbname noc -X -A -t -q  --no-align`

# Проверяем БД доступна

    RETVAL=$?

    

    if [ $RETVAL -eq 1  ]

        then

        echo "Postgress DOWN"

        exit

    fi

    

    

    if [ -n "$SQLRESULT" ]

        then

        # хост присутствует в БД и надо проверять для него SNMP для обновления данных

        echo -e $SQLRESULT "есть в БД"

        # выводим адресс в файл

        echo -e $address >> $BASEDIR/out.hostsbd.txt

        

        

        else

        echo -e $SQLRESULT "нет в БД"

        # по параметрам default заполняет строку нужными значениями

        # выводим в файл out.hostsadd.txt так как данного хоста нету в БД

                        

            # ADDROW="$address,True,default,activatormain,,Huawei.VRP,huawei.fttb,с.Алгай_ул.Новобозарная_13_Ал.Гай ЦАТС,,0,$address,0,admin,admin,admin,,$address,,,,,,,,Cisco/router,,,,5,"

            

            # необходимо чтобы нормально работал пинг.

            # $trap_source_ip = "$address"

            

            ADDROW="$address,$is_managed,$administrative_domain,$activator,$collector,$profile_name,$object_profile,$description,$auth_profile,$scheme,$address,$port,$user,$password,$super_password,$remote_path,$address,$trap_community,$snmp_ro,$snmp_rw,$vc_domain,$vrf,$termination_group,$service_terminator,$shape,$config_filter_rule,$config_diff_filter_rule,$config_validation_rule,$max_scripts,$tags"

            echo -e $ADDROW >> $BASEDIR/out.hostsadd.txt

    fi

 

 

 

 

у меня скрипт запускается каждую ночь по расписанию в cron:

...