Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »

Типичная ситуация которая возникает при запуске в эксплуатацию NOC - добавление новых объектов МО в SA когда объектов в нём нет и автоматическое добавление замонтированного оборудования в процессе эксплуатации сети.

Я не умею программировать, поэтому задачу решал "в лоб" с использованием подручных инструментов:

  1. nmap
  2. bash
  3. команды ./noc csv-import sa.managedobject .....

у NOC есть возможность из консоли импорта специально сформированного csv файла с информацией о объектах МО. Основная цель скрипта - сформировать этот файл и передать его на импорт в систему.

Алгоритм действий такой:

  1. считать из параметров скрипта сканируемый диапазон  IP
  2. передать их nmap  и вывести результат сканирования в файл.
  3. построчно прочитать данный файл и провести проверку через psql , есть ли такой IP в объектах МО
  4. если объекта нет - вывести в текстовый файл специально сформированную строку
  5. сформированный .cvs файл передать на импорт в NOC и отправить на почту для информирования

Обратите внимание на пути:

  1. нок установлен в  /opt/noc
  2. в переменной BASEDIR - путь где выполняется скрипт
  3. NMAPBIN путь к nmap

  В качестве параметра скрипту передются ДВА диапазона для сканирования и параметр scan. При наличии параметра scan удаляются результаты предыдущей работы скрипта, если параметра нет - то скрипт работает с уже полученными данными.

 

запуск

./cron.sh scan

........

# ls -1

cron.sh

hostsscan.txt

networkscan.txt

out.hostsadd.txt

out.hostsbd.txt

out.hostsscan.txt

result.hostsadd.csv

После работы скрипта получаются файлы:

  • hostsscan.txt - файл с результатами сканирования сети NMAP
  • networkscan.txt - список подсетей для сканирования в формате который понимаем nmap
  • out.hostsadd.txt - файл со списком хостов которых нет в МО
  • out.hostsbd.txt - файл со списком хостов которые ЕСТЬ в МО
  • out.hostsscan.txt - файл с результатами сканирования сети NMAP
  • result.hostsadd.csv - результат работы скрипта готовый для импорта через ./noc csv-import sa.managedobject .....

  

#!/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


 

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

0 21 * * * /opt/scripts/discoverynet/cron.sh scan >/dev/null 2>&1

 

  • No labels