2013-10-30 64 views
2

我通过python脚本telnet到cisco交换机。代码如下:使用python的Telnet cisco交换机

#!/usr/bin/python 
import getpass 
import sys 
import telnetlib 

HOST = "10.203.4.1" 
user = raw_input("Enter your remote account: ") 
password = getpass.getpass() 

tn = telnetlib.Telnet(HOST) 

tn.read_until("login: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

tn.write("vt100\n") 
tn.write("ls\n") 
tn.write("exit\n") 
print tn.read_all() 

它只是在运行脚本后挂起。我该如何解决这个问题?

+0

也许思科写'用户名:'或'登录:'但是你的代码正在等待'登录:'。使用'print'在屏幕上写更多信息给你 - 比如“现在我将等待”登录:'“等。 – furas

回答

1

这里有一个简单的解决方案:

import pexpect 
import getpass 

HOST = "10.203.4.1" 
user = raw_input("Enter your remote account: ") 
password = getpass.getpass() 

child = pexpect.spawn ('telnet '+HOST) 
child.expect ('Username: ') 
child.sendline (user) 
child.expect ('Password: ') 
child.sendline (password) 
# If the hostname of the router is set to "deep" 
# then the prompt now would be "deep>" 
routerHostname = "deep" #example - can be different 
child.expect (routerHostname+'>') 
child.sendline ('enable') 

等等

+0

请你可以更详细地解释最后3行。或者如果主机名是别的。请你详细说明。谢谢 – deep

+0

所以当你通过telnet登录到路由器时你必须考虑它。确保你可以从命令行执行telnet 10.203.4.1',那么你必须得到'Username:'提示符,然后是'Password:'提示符等。 如果你成功登录,你将能够请参阅通过telnet收到的下一个提示。在我上面的程序中,我手动将主机名设置为“深” - 你可以使用任何你喜欢的。 下一个'child.expect'基本上希望看到一个提示符,其中包含主机名。 –

+0

是否有任何方法通过pexpect从交换机获取主机名?谢谢。 – deep

0

首先请考虑使用除telnet之外的东西。 SSH是一个很好的替代品。 其次为了使这个pythonic使用一个名为pexpect的库来做这件事。最后一行将使用命令.interact()再次获得控制权。

+1

ssh端口在Cisco交换机上关闭。 – deep

+0

有些设备因“遗留”原因不支持telnet。有时候这些遗留的原因是企业文化固有的。呃...技术。 – jathanism

2

你应该看看触发:https://trigger.readthedocs.org/en/latest/

这是一个自动化工具与网络设备进行交互,如Cisco路由器/交换机:

from trigger.cmds import Commando 

class ShowClock(Commando): 
    """Execute 'show clock' on a list of Cisco devices.""" 
    vendors = ['cisco'] 
    commands = ['show clock'] 

if __name__ == '__main__': 
    device_list = ['foo1-abc.net.aol.com', 'foo2-xyz.net.aol.com'] 
    showclock = ShowClock(devices=device_list) 
    showclock.run() # Commando exposes this to start the event loop 

    print '\nResults:' 
    print showclock.results 

查阅文档以获取更多信息mation:https://trigger.readthedocs.org/en/latest/

0

思科的Python脚本的Telnet为Cisco路由器和交换机为telnet命令直接登录 最好和简单的脚本和配置第3个设备。

import getpass 
import sys 
import telnetlib 

HOST = "YOUR ROUTER IP ADDRESS" 
user = raw_input("Enter your telnet username: ") 
password = getpass.getpass() 

tn = telnetlib.Telnet(HOST) 

tn.read_until("Username: ") 
tn.write(user + "\n") 
if password: 
tn.read_until("Password: ") 
tn.write(password + "\n") 


tn.write("exit\n") 

    print tn.read_all() 

链接的代码: Download the script here

步骤:

  1. 安装蟒终端装置和连接终端装置到路由器

  2. 配置telnet和用户名和密码数据库

  3. 运行python脚本