python telnetlib.te lnet () не подключается с помощью переменных - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над сценарием для извлечения настроек из устройств Cisco в GNS3. Скрипт должен проходить по текстовому файлу и разделять IP и порт из каждой строки на переменные. Затем эти переменные подаются в соединение te lnet в качестве параметров IP и порта Telnetlib.

import telnetlib

#Open file with list of switches
f = open ("C:\ProgramData\ports.txt")

#Telnet to each switch and configure it
for line in f:
    linePort = line[10:]
    lineIP = line[:-6]
    print "Getting running-config " + lineIP + " " + linePort
    tn = telnetlib.Telnet(lineIP,linePort)

Однако использование переменных всегда приводит к выдаче ошибки (см. Ниже), но если Я жестко закодирую те же значения, что могу создать соединение без проблем. Поскольку он работает с жестко закодированным значением, я попытался принудительно задать строковый тип с str() для двух переменных, но это не изменило результат, и все равно выдает следующую ошибку:

C:\Users\SomeUser>python %userprofile%\desktop\config.py
Getting running-config 127.0.0.1  5000

Traceback (most recent call last):
  File "C:\Users\Michael\desktop\config.py", line 11, in <module>
    tn = telnetlib.Telnet(lineIP,linePort)
  File "C:\python27amd64\lib\telnetlib.py", line 211, in __init__
    self.open(host, port, timeout)
  File "C:\python27amd64\lib\telnetlib.py", line 227, in open
    self.sock = socket.create_connection((host, port), timeout)
  File "C:\python27amd64\lib\socket.py", line 557, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 10109] getaddrinfo failed

выброшено socket.gaierrr: [Errno 10109] getaddrinfo failed, которое я пытался изучить, но не смог найти разрешение, которое мне подходит. Учитывая, что этот процесс должен быть автоматизирован и в oop жизненно важно, чтобы он работал с переменной. Поэтому любая помощь, которую вы все могли бы оказать, была бы очень признательна.

1 Ответ

0 голосов
/ 24 апреля 2020

Я наткнулся на ответ на этот вопрос в другом вопросе, и это заставляет меня чувствовать себя идиотом из-за недосмотра.

При использовании переменных для параметров Telnet порт должен быть целым числом. Таким образом, решение было заставить его использовать int(var), а затем он подключился без проблем. Теперь рабочий код выглядит следующим образом.

import telnetlib

#Open file with list of switches
f = open ("C:\ProgramData\ports.txt")

#Telnet to each switch and configure it
for line in f:
    linePort = line[10:]
    lineIP = line[:-6]
    print "Getting running-config " + lineIP + " " + linePort
    tn = telnetlib.Telnet(lineIP,int(linePort))
...