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 7 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 10.64.15-253.2-255 192.168.0.0-255 scan

........

# ls -1

cron.sh

hostsscan.txt

out.hostsadd.txt

out.hostsbd.txt

out.hostsscan.txt

result.hostsadd.csv

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

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

  

#!/bin/bash
#  set -e   ?

export LANG="ru_RU.UTF-8"
export LOCALE="ru_RU"

BASEDIR=/opt/scripts/discoverynet

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

NMAPBIN="/usr/bin/nmap -sP -oG $BASEDIR/out.hostsscan.txt"
echo $NMAPBIN

# заносим параметры по default для формирования csv файла
#name=address
is_managed="True"
administrative_domain="default"
activator="default"
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 [ "$3" = "scan" ]
    then
	# очищаем вывод от предыдущего запуска
	cd $BASEDIR && rm result* out*

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

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

while read -r line

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

# проверяем что вывод ненулевой и проверяем есть ли оно в бд
    if [ -n "$address" ]
        then

	SQLQUERY="SELECT address FROM sa_managedobject where address = '$address' and name not like 'wiping-%' ;"
	SQLRESULT=`echo $SQLQUERY | psql -U noc --dbname noc -X -A -t -q --single-transaction --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,"
    	    ADDROW="$address,$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"
    	    echo -e $ADDROW >> $BASEDIR/out.hostsadd.txt
	fi
    fi
    echo -e "\n\n"
done < $BASEDIR/out.hostsscan.txt

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

if [ -a $BASEDIR/out.hostsadd.txt ]
    then
	echo $headcvs > $BASEDIR/result.hostsadd.csv
	cat out.hostsadd.txt >> $BASEDIR/result.hostsadd.csv

	# добавление хостов. 
	cd /opt/noc && ./noc csv-import sa.managedobject -r skip -v 3 $BASEDIR/result.hostsadd.csv
	# отправка почты
	/bin/mail -S sendcharsets=utf-8 -s "Найденный новые хосты СПД" -a $BASEDIR/result.hostsadd.csv test@example.com < $BASEDIR/result.hostsadd.csv
fi

# возьмите с полки пирожок, если дочитали до этого места. 

 

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

0 21 * * * /opt/scripts/discoverynet/cron.sh 10.64.15-253.2-255 88.147.192.168.0.0-255 scan >/dev/null 2>&1

 

  • No labels