python telnetlib.telnet() 未使用变量连接

python telnetlib.telnet() not connecting using variables

我正在编写脚本以从 GNS3 中的 Cisco 设备中提取配置。该脚本应该循环遍历一个文本文件,并将每一行的 IP 和端口切片到变量中。然后将这些变量作为 Telnetlib.

的 IP 和端口参数输入到 telnet 连接中
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,我已尝试调查该错误,但未能找到适合我的解决方案。鉴于这个过程应该是自动化的并且在一个循环中,让它与变量一起工作是至关重要的。因此,非常感谢你们能提供的任何帮助。

我在另一个问题中偶然发现了 answer 这个问题,这让我觉得自己是个疏忽大意的白痴。

当使用变量作为 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))