Найти - Пользователи
Полная версия: Python и сетевое оборудование
Начало » Network » Python и сетевое оборудование
1 2 3
avdoshkin
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys
import telnetlib


def delet():
user ="adm"
password ="xxxx"
host = 'mon2-2'
try:
tn = telnetlib.Telnet(host,23,15)
tn.set_debuglevel(1)
tn.read_until(":")
tn.write(user+"\n")
tn.write(password+"\n")
tn.write("config limited_multicast_addr ports 1-50 delete multicast_range amino\n")
tn.write("config limited_multicast_addr ports 1-50 delete multicast_range cpu\n")
tn.write("config limited_multicast_addr ports 1-50 delete multicast_range deny\n")
tn.write("config limited_multicast_addr ports 1-50 delete multicast_range sw\n")
tn.write("delete multicast_range amino\n")
tn.write("delete multicast_range cpu\n")
tn.write("delete multicast_range deny\n")
tn.write("delete multicast_range sw\n")
tn.write("save\n")
tn.write("logout\n")
tn.read_all()
tn.close()
except Exception:
pass

delet()
Пример для DES-3526, DES3550, DGS-3627G. Есть еще вариант обработка в потоке если нужно выложу.
DVM-Avgoor
Подниму старинную тему, может кому поможет:

UserName:
Telnet(10.10.10.90,23): send '\xfe'
Telnet(10.10.10.90,23): send 'FakeUser\n'
Telnet(10.10.10.90,23): recv '\xff\xfe\x03'
Telnet(10.10.10.90,23): IAC DONT 3
Telnet(10.10.10.90,23): recv '\xff\xfc\x03'
Telnet(10.10.10.90,23): IAC WONT 3
Telnet(10.10.10.90,23): recv '\xff\xfc\x01FakeUser\n\rPassWord:'
Telnet(10.10.10.90,23): IAC WONT 1
FakeUser
PassWord:
Telnet(10.10.10.90,23): send 'parol\n'
parol

Telnet(10.10.10.90,23): recv '*'
Telnet(10.10.10.90,23): recv '****\n\r\n\rDES-3200-26:5#'
*******
tn = telnetlib.Telnet(HOST)
tn.set_debuglevel(19)
print tn.read_until('me:')
tn.write("\xfe")
tn.write("FakeUser\n")
print tn.read_until('d:')
tn.write("parol\n")
print tn.read_until('#')
Как видите я шлю \xfe (подходит кстати почти любой код, \x01 и прочие) в сторону свитча до логина, это какое-то универсальное спасение, что-ли. Если не слать этой белиберды свитч по непонятной причине считает пароль длиннее чем он есть и естественно не принимает , причем судя по дебагу и даже tcpdumpу - send ('parol\n') верный.
Такой фигни с каталистами, хп и просто цискороутерами не видел, а вот длинк на те пожалуйста.
Soeti
C read_until были аналогичные выше проблемы.

....
try:
tn = telnetlib.Telnet(Host, 23, 2)
except:
print "Error connect" + Host + "\n"
return

tn.read_eager()
tn.write(user + "\n")
tn.read_eager()
tn.write(password + "\n")
....
Так работает везде. Ждать приглашения “UserName” по сути не нужно - просто “сьедаем” весь вывод и вводим данные в нужной последовательности.
vvpoloskin
Вообще, для реализации удалённого/автоматизированного управления через telnet/minicom/ssh отично подходит pyexpect. Там гораздо меньше проблем с таймингами, и с regexp он более гибок.

Для работы через web с помощью python. Над внимательнее смотреть на frontend-код. Я пробовал натравить python на две железки через web(Linksys и Huawei), там оказалось на самом деле перед отправкой данных на форму они кодировались через db64 по модифицированному алфавиту и базе. Пришлось это учитывать.
DVM-Avgoor
Кстати, относительно оборудования dlink. Workaround нашел:
def bulk(self, cmd, opt):
pass

tn = telnetlib.Telnet()
tn.open(ip)
tn.set_option_negotiation_callback(bulk)
Вот так, если telnetlib не будет отвечать dlinkу на его IAC, все станет просто изумительно даже с read_until.
PPpan
Странно у нас это работало, может прошивка другая. А можете руками на железку зайти и лог сюда выложить.
PPpan
У меня впечатление что свич не успевает за вами, попробуйте напихать небольших rest между write`ами.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB