Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2018, 17:20   #1
mahone93
 
Регистрация: 06.05.2018
Сообщений: 6
По умолчанию подключение к оборудованию.

Коллеги, доброго дня!
Имеется задача:

Есть linux-машина и 2 маршрутизатора mikrotik (со сброшенной конфигой), все 3 девайса подключаются к коммутатору, образуя единый бродкаст домен.
Требуется написать скрипт на python (версия не ниже 2.7), который бы выполнял подключение linux-машины к этим маршрутизаторам и, например, прописывал ip-адреса на их интерфейсах.
Т.к. изначально на микротиках нет настроек, то подключение должно осуществляться с помощью mactelnet-клиента.

Пример настройки ip - "/ip address add address=192.168.1.1/24 interface=ether1"

Просьба помочь с написанием кода. Предполагаю, что надо использовать модуль subprocess, но пока еще не постиг дзен по питону.
mahone93 вне форума Ответить с цитированием
Старый 06.05.2018, 18:49   #2
mahone93
 
Регистрация: 06.05.2018
Сообщений: 6
По умолчанию

Предполагаем, что МАС-адреса сетевых интерфейсов нам уже известны.
mahone93 вне форума Ответить с цитированием
Старый 07.05.2018, 08:17   #3
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Я как то давно писал паука, был список свитчей циска, хуавей и тренднет кажется, целью было заходить по telnet и прописывать некоторые команды которые хранились в бд. Так вот сначала я использовал telnetlib но мне он что-то не понравился, и я перешел на pexpect

Я сейчас фрагменты вставлю чтобы Вам было более понятно:

Код:
	child = pexpect.spawn('telnet %s' % ip_addr, timeout=int(conf.timeout_app))
			child.timeout = int(conf.timeout_app)
			child.maxread=5000 # Sets buffer to 1000 characters.
			child.logfile = open("./libs/mylog", "w")
			# Try to authorize: timeout 3 sec in default
			vendor_name = child.expect(vndr_name,int(conf.timeout_expect))

			# Send a message through SSE
			yield "data:" + str('Switch detecting .. IP: :' + str(ip_addr) +' ('+ str(VEN_NAME[vendor_name]) + ')!') + "\n\n"
			
			child.sendline(str(conf.auth_login))			
			child.expect(str(vndr_pass[vendor_name]), int(conf.timeout_expect))
			yield "data:" + str('Login is OK!') + "\n\n"
			child.sendline(str(conf.auth_password))			
			child.expect('.')
			symbol = child.expect (sm, int(conf.timeout_expect))

				for commands in configure_command[VEN_NAME[vendor_name]]:
					if (commands.strip() != ""):
						command = commands.replace("\n", "")
						child.sendline(command + ' \n')
						time.sleep(1)						
						symbol = child.expect (sm, int(conf.timeout_expect))						
						if (symbol == 2):							
							yield "data: #" + str('COMMAND: '+ str(command) + ' [SEND OK]') + " \n\n"
						else:
							yield "data:" + str('terminate!') + "\n\n"
							child.close()
Вот пример попроще.

Код:
import pexpect
import time,sys
telconn = pexpect.spawn('telnet 192.168.100.85')
time.sleep(20)
telconn.logfile = sys.stdout
telconn.expect(":")
time.sleep(20)
telconn.send("usr" + "\r")
telconn.expect(":")
telconn.send("Pass@123" + "\r")
telconn.send("\r\n")
time.sleep(20)
telconn.expect(">")
Или вот еще

Код:
import pexpect

switch_ip = "10.0.0.1"
switch_un = "user"
switch_pw = "pass"
switch_enable_pw = "pass2"
port = "Gi2/0/2"
vlan = 300

try:
  try:
    child = pexpect.spawn('ssh %s@%s' % (switch_un, switch_ip))
    if verbose:
        child.logfile = sys.stdout
    child.timeout = 4
    child.expect('Password:')
  except pexpect.TIMEOUT:
    raise OurException("Couldn't log on to the switch")

  child.sendline(switch_pw)
  child.expect('>')
  child.sendline('terminal length 0')
  child.expect('>')
  child.sendline('enable')
  child.expect('Password:')
  child.sendline(switch_enable_pw)
  child.expect('#')
  child.sendline('conf t')
  child.expect('\(config\)#')
  child.sendline('interface %s' % (port))
  o = child.expect(['\(config-if\)#', '% Invalid'])
  if o != 0:
      raise Exception("Unknown switch port '%s'" % (port))
  child.sendline('switchport access vlan %s' % (vlan))
  child.expect('\(config-if\)#')
  child.sendline('no shutdown')
  child.expect('#')
  child.sendline('end')
  child.expect('#')
  child.sendline('wr mem')
  child.expect('[OK]')
  child.expect('#')
  child.sendline('quit')
except (pexpect.EOF, pexpect.TIMEOUT), e:
    error("Error while trying to move the vlan on the switch.")
    raise
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 07.05.2018 в 08:26.
Stanislav вне форума Ответить с цитированием
Старый 07.05.2018, 20:46   #4
mahone93
 
Регистрация: 06.05.2018
Сообщений: 6
По умолчанию

Большое спасибо! Попробую внедрить в свою схему. По результату отпишусь)
mahone93 вне форума Ответить с цитированием
Старый 07.05.2018, 21:53   #5
mahone93
 
Регистрация: 06.05.2018
Сообщений: 6
По умолчанию

pexpect действительно хорош.
Возник еще один вопросик по ходу дела: есть ли возможность запускать скрипт в фоновом режиме, чтобы на экране не отображались все эти этапы подключения?
mahone93 вне форума Ответить с цитированием
Старый 07.05.2018, 23:18   #6
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Да можете запустить как нибудь так
Код:
python app.py > /dev/null 2>&1 &
или так
Код:
nohup /path/to/app.py &
погуглите вариантов много
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к оборудованию. develop2201 JavaScript, Ajax 0 07.09.2017 05:07
подключение двух компьютеров к интернет через одно подключение Chudo4258 Помощь студентам 3 30.03.2010 16:07
индентификация по оборудованию Трофимов Александр Win Api 6 01.12.2006 13:37