ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

运维少年系列 python and cisco (3)

2021-03-11 22:55:18  阅读:230  来源: 互联网

标签:cisco 运维 python ip py connect 033 异常 paramiko


运维少年系列 python and cisco (3)

骚年 运维少年

运维少年系列 python and cisco (3)

异常处理

什么是异常处理?

异常处理通常来说是对程序在执行时(非编译时)出现的各种报错进行处理,如果没有异常处理,那么在程序出错的时候,整个程序会立即退出,而做了异常处理之后,程序会根据异常定义的方式进行错误处理。

通俗来讲:如果没有异常处理,那程序出错的时候就GG了

系列文章常见的异常

这个系列的文章常见的异常有哪些呢?

  • 连接失败
    连接失败的原因有很多种,比如网络不通啦、端口没开啦…

连接失败抛出的异常如下


1[root@yunwei cisco]# python ywsn_p_c_lab3.py 
2Traceback (most recent call last):
3  File "ywsn_p_c_lab3.py", line 9, in <module>
4    s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)
5  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 362, in connect
6    raise NoValidConnectionsError(errors)
7paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Unable to connect to port 22 on 192.168.200.2
8[root@yunwei cisco]#

做异常处理的时候,我们需要关注的是什么呢?就是异常抛出的代码,比如这里的paramiko.ssh_exception.NoValidConnectionsError

如何做异常处理?在python中异常处理使用try:... expect...,如


 1import paramiko
 2import time
 3user = 'yunwsn'
 4passwd = '123456'
 5s = paramiko.SSHClient()
 6s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 7IP = file('IP.txt','rb')
 8
 9for ip in IP.xreadlines():
10    try:  # 异常处理以下内容
11        s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)  # 如果这里出现异常,那么直接到execpt代码块中去了,不会打印下面的成功
12        print '[ \033[0;32m success\033[0m ] login %s ' %ip
13
14    except paramiko.ssh_exception.NoValidConnectionsError:
15        print '[ \033[0;32m failed \033[0m ] Unable to connect to %s ' % ip
16
17
18IP.close()

运行一下(动图)

运维少年系列 python and cisco (3)

  • socket超时
    异常如下,有时候由于网络质量不好或者IP不存在,导致socket连接超时(任何连接都是基于socket的),出现以下异常

 1Traceback (most recent call last):
 2  File "ywsn_p_c_lab3.py", line 11, in <module>
 3    s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)
 4  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 343, in connect
 5    retry_on_signal(lambda: sock.connect(addr))
 6  File "/usr/lib/python2.7/site-packages/paramiko/util.py", line 280, in retry_on_signal
 7    return function()
 8  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 343, in <lambda>
 9    retry_on_signal(lambda: sock.connect(addr))
10  File "/usr/lib64/python2.7/socket.py", line 224, in meth
11    return getattr(self._sock,name)(*args)
12socket.error: [Errno 110] Connection timed out

这里抛出的异常代码就是socket.error,可以看到这个是socket模块的报错,如果我们要处理这种异常的话,那么需要导入socket模块才可以。

  • 认证失败
    由于我们在这个系列文章中使用的是ssh的办法,所以会有验证的过程,所以验证失败也是常见的一种异常方式。

来看一下认证失败抛出的异常


1  File "ywsn_p_c_lab3.py", line 11, in <module>
2    s.connect(ip,username=user,password='123',look_for_keys=False,allow_agent=False)
3  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 437, in connect
4    passphrase,
5  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 749, in _auth
6    raise saved_exception
7paramiko.ssh_exception.AuthenticationException: Authentication failed.

那么这里的异常代码是什么呢?肯定是paramiko.ssh_exception.AuthenticationException: Authentication failed.啦~

这里如何做异常处理我就不多说了吧!大家可以参照上面的自己验证一下。

拓扑说明

  • 拓扑图
    运维少年系列 python and cisco (3)
  • 说明
    我会在IP.txt中写入4个IP,两个在拓扑图中,一个另两个不在,实现网络不通、超时、验证失败、一切ok着三种情况。

实现代码

这里为了方便大家看,我就把所有的异常分开了,其实放在一起也是可以的。以下对新代码进行注释,其余代码注释可以查看前两篇文章。


 1import paramiko
 2import socket  # 导入socket模块
 3import time 
 4user = 'yunwsn'
 5passwd = '123456'
 6s = paramiko.SSHClient()
 7s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 8IP = file('IP.txt','rb')
 9
10for ip in IP.xreadlines():
11    try:  # 异常处理
12        s.connect(ip,username=user,password=passwd,timeout=5,look_for_keys=False,allow_agent=False)
13        print '[ \033[0;32m success\033[0m ] login %s ' %ip
14        cmd = s.invoke_shell()
15        cmd.send('show ip int bri \n  ')
16        time.sleep(0.1)
17        output = cmd.recv(65535)
18        print output
19        cmd.close()
20    except paramiko.ssh_exception.NoValidConnectionsError: # 网络/端口不通异常
21        print '[ \033[0;31m failed \033[0m ] Unable to connect to %s ' % ip
22    except socket.error,err:  # 超时异常,err代表异常代码之后的提示
23        print '[ \033[0;31m failed \033[0m ] %s to %s' %(err,ip)
24    except paramiko.ssh_exception.AuthenticationException: # 验证失败的异常
25        print '[ \033[0;31m failed \033[0m ] Authentication failed on %s' % ip
26
27IP.close()
  • IP.txt

1192.168.108.252
2192.168.108.253
3192.168.108.254
4192.168.108.251
  • 运行效果(动图)
    运维少年系列 python and cisco (3)

标签:cisco,运维,python,ip,py,connect,033,异常,paramiko
来源: https://blog.51cto.com/15082392/2656479

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有