SNMPv3

  • SNMPv3在路由器端的配置

这个我都没配置过,还得现学现卖
这个链接说的是SNMPv3的基本配置

这个链接说的是SNMPv3的view命令,用于管理员可以看到哪些层级的内容

1) 配置

snmp-server group READONLY v3 priv read VIEWSTD access 98
snmp-server view VIEWSTD iso included
snmp-server community galileo RO 98
snmp-server user <user> READONLY v3 auth sha <password> priv aes 128 <key>

上面的命令的意思是,snmp-server view VIEWSTD iso included是创建一个view, 这个view里只能看iso级和iso级以下的(include),创建了一个group叫READONLY, 版本v3,权限是读,VIEWSTD是和刚刚的view设置绑定, access 98是调用名字为98的ACL做访问控制。最后是创建一个v3独有的user,user有名字,也有认证用的password,也有加密用的password,把它绑到READONLY组

2) 注意snmp-server user 命令打完之后,在running config里是看不到的,用以下命令看

router1#sho snmp user

User name: pysnmp
Engine ID: 8000000903001C6A7AAF5768
storage-type: nonvolatile active
Authentication Protocol: SHA
Privacy Protocol: AES128
Group-name: READONLY
  • snmp_helper.snmp_get_oid_v3(a_device, snmp_user, oid=the_oid)

1) 变化一
去除了community的赋值,取而代之的是username, auth_key, encrypt_key. 并创建snmp_user元组

2) 变化二

他跟普通的v2版本的snmp_get_oid的最大的不同就是,中间多了一个叫user的参数,也就是刚刚在路由器上的最后一条命令创造的那个user

3) 变化三

a_device 在赋值的时候,以往是a_device = (ip_addr, commu, port), 现在是a_device = (ip_addr, port), 减少了中间的commu

4) 总体的一个代码是这样的

import snmp_helper

'''
router1#sho snmp user User name: pysnmp
Engine ID: 8000000903001C6A7AAF5768
storage-type: nonvolatile active
Authentication Protocol: SHA
Privacy Protocol: AES128
Group-name: READONLY
''' OID = '1.3.6.1.2.1.1.5.0' ip_addr = '184.105.247.70'
port = 161 snmp_user = 'pysnmp'
auth_key = 'galileo1'
encrypt_key = 'galileo1' a_user = (snmp_user, auth_key, encrypt_key) #组成user元组
a_device = (ip_addr, port) #组成device元组 snmp_data = snmp_helper.snmp_get_oid_v3(a_device, a_user, OID)
output = snmp_helper.snmp_extract(snmp_data) print output
  • 利用snmp获取interface相关数据

通过思科的工具查到和interface description相关的OID是‘1.3.6.1.2.1.2.2.1.2’,再通过snmpwalk命令到具体的设备上去查具体的端口信息

(applied_python)[-class3]$ cat snmp_walk_interface_descrp.txt
(applied_python)[- class3]$ snmpwalk -Os -c galileo -v 1 184.105.247.70 1.3.6.1.2.1.2.2.1.2
ifDescr.1 = STRING: FastEthernet0
ifDescr.2 = STRING: FastEthernet1
ifDescr.3 = STRING: FastEthernet2
ifDescr.4 = STRING: FastEthernet3
ifDescr.5 = STRING: FastEthernet4
ifDescr.6 = STRING: Null0
ifDescr.7 = STRING: Vlan1
ifDescr.11 = STRING: Vlan127
ifDescr.13 = STRING: Vlan157
(applied_python)[class3]$ snmpwalk -Os -c galileo -v 1 184.105.247.70 1.3.6.1.2.1.2.2.1.2.5
ifDescr.5 = STRING: FastEthernet4
(applied_python)[class3]$
  • for循环一次读取多个OID
#! /usr/bin/env python
import snmp_helper snmp_oids = (
('sysName', '1.3.6.1.2.1.1.5.0', None),
('sysUptime', '1.3.6.1.2.1.1.3.0', None),
('ifDescr_fa4', '1.3.6.1.2.1.2.2.1.2.5', None),
('ifInOctets_fa4', '1.3.6.1.2.1.2.2.1.10.5', True),
('ifInUcastPkts_fa4', '1.3.6.1.2.1.2.2.1.11.5', True),
('ifOutOctets_fa4', '1.3.6.1.2.1.2.2.1.16.5', True),
('ifOutUcastPkts_fa4', '1.3.6.1.2.1.2.2.1.17.5', True),
) ip_addr = '184.105.247.70'
port = 161 snmp_user = 'pysnmp'
auth_key = 'galileo1'
encrypt_key = 'galileo1' a_user = (snmp_user, auth_key, encrypt_key)
a_router = (ip_addr, port) for desc, each_oid, is_count in snmp_oids:
snmp_data = snmp_helper.snmp_get_oid_v3(a_router, a_user, oid=each_oid)
output = snmp_helper.snmp_extract(snmp_data)
print "%s %s" % (desc, output)

注意上面这段代码中的for循环中的这个 is_count,虽然他不发挥什么作用,我们在for中并不引用它,但是它也必须在for a,b,c in snmp_oids中出现,因为snmp_oid这个tuple的每个元素,都是三个元素组成的小tuple,如果把is_count去掉,会出现“ValueError: too many values to unpack”

  • 每隔一段时间运行一下上面那个for循环
#! /usr/bin/env python

import snmp_helper
import sched, time
from datetime import datetime snmp_oids = (
('sysName', '1.3.6.1.2.1.1.5.0', None),
('sysUptime', '1.3.6.1.2.1.1.3.0', None),
('ifDescr_fa4', '1.3.6.1.2.1.2.2.1.2.5', None),
('ifInOctets_fa4', '1.3.6.1.2.1.2.2.1.10.5', True),
('ifInUcastPkts_fa4', '1.3.6.1.2.1.2.2.1.11.5', True),
('ifOutOctets_fa4', '1.3.6.1.2.1.2.2.1.16.5', True),
('ifOutUcastPkts_fa4', '1.3.6.1.2.1.2.2.1.17.5', True),
) ip_addr = '184.105.247.70'
port = 161 snmp_user = 'pysnmp'
auth_key = 'galileo1'
encrypt_key = 'galileo1' a_user = (snmp_user, auth_key, encrypt_key)
a_router = (ip_addr, port) #s = sched.scheduler(time.time, time.sleep) def loop_the_oids(snmp_oids):
for desc, each_oid, is_count in snmp_oids:
snmp_data = snmp_helper.snmp_get_oid_v3(a_router, a_user, oid=each_oid)
output = snmp_helper.snmp_extract(snmp_data)
print "%s %s" % (desc, output) def print_current_time():
print datetime.now() for time_range in range(1,13):
print "time %d" % (time_range*10)
loop_the_oids(snmp_oids)
time.sleep(10)

本来是想用 sched来打印时间戳的,但是后来觉得用time.sleep和print一个累加的数字就可以实现下一步要用的横坐标了

Graph from SNMP data

我觉得这有点重复造轮子了,因为这个完全可以通过Cacti实现,而且Cacti实现的又特别好

  • pygal

pip install pygal即可

1) 初始化一个object,line_chart = pygal.Line()
2) 初始化横坐标 line_chart.x_labels = [‘0’, ‘10’, ‘20’, ‘40’]
3) 初始化一条数据折线
fa4_in_packets = [] 一个数组,这个数组在视频里Kirk是直接手写的,但是也可以从上一个实验的结果里提取,这也是这次的练习作业,还是有点难度
line_chart.add(‘InPackets’, fa4_in_packets)
4) 保存为svg格式的图片
line_chart.render_to_file(‘test.svg’)
svg格式的图片需要用浏览器打开

Sending Email

  • smtplib

python自带的一个库,使用的方式很简单,代码在最后

  • from email.mime.text import MIMEText

这个MIMEText是个什么呢,Wikipedia的解释如下
Multipurpose Internet Mail Extensions (MIME) is an Internet standard that extends the format of email to support: Text in character sets other than ASCII. Non-text attachments: audio, video, images, application programs etc.

  • 代码部分

这个password要注意,这个是在网易邮箱设置里,找到SMTP相关那一栏,点进去勾选IMAP/SMTP 和 POP3/SMTP的时候,会让你设置一个单独的密码,网易把这个码称为邮箱客户端授权码,在第三方客户端(也就是我们今天的脚本)中发邮件的时候,用这个码代替原来的163邮箱的密码

import smtplib

from email.mime.text import MIMEText

recipient1 = "balabala@163.com"

mail_host1 = "smtp.163.com"
mail_password1 = "*****"
mail_sender1 = "balabala@163.com" def send_email(recipient, subject, message, mail_sender, mail_host, mail_password):
try:
smtp_conn = smtplib.SMTP()
smtp_conn.connect(mail_host)
smtp_conn.login(mail_sender, mail_password)
print "conn created" message = MIMEText(message)
message['To'] = recipient
message['Subject'] = subject
message['From'] = mail_sender
smtp_conn.sendmail(mail_sender, recipient, message.as_string())
smtp_conn.close()
print "Your message has been sent"
return True
except Exception, e:
return False
print "oops something wrong" send_email(recipient1, "Test", "sent by script", mail_sender1, mail_host1, mail_password1)

SNMPv3/pygal制图/smtplib发邮件的更多相关文章

  1. python之smtplib发邮件

    第一版: 认证发信,不支持附件 #!/usr/bin/env python # --------------------------------------- # author : Geng Jie ...

  2. Python smtplib发邮件

    常用邮箱SMTP.POP3域名及其端口号 发送普通文本内容的邮件 import smtplib from email.header import Header from email.mime.text ...

  3. python 利用 smtplib发邮件

    import smtplib from email.mime.text import MIMEText title = "request build error" content ...

  4. 【Python】 发邮件用 smtplib & email

    smtplib & email ■ 概述 发邮件主要用到smtplib以及email模块.stmplib用于邮箱和服务器间的连接,发送的步骤.email模块主要用于处理编码,邮件内容等等.主要 ...

  5. Python自动发邮件——smtplib和email库和yagmail库

    ''' 一.先导入smtplib模块 导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以163为例子百度搜索服务器是 smtp.163.com 三. ...

  6. EDM营销算法:python自动批量发邮件

    EDM营销:全称Email Direct Marketing,即电子邮件营销.企业可以通过使用EDM软件向目标客户发送EDM邮件,建立同目标顾客的沟通渠道,向其直接传达相关信息,用来促进销售.EDM软 ...

  7. python发邮件遇到的端口号问题

    在学习使用python发邮件的过程中, 遇到了一个问题:由于测试的时候使用的是QQ邮箱,要求必须使用SSL/TLS加密,所以有了下面的代码, from email.mime.text import M ...

  8. python 发邮件 utf-8

    import smtplib from operator import itemgetter, attrgetter from email.mime.text import MIMEText from ...

  9. 使用python发邮件

    使用python发邮件 网上有很多发邮件的例子,本人在网上找了一份,稍加修改后使用 上源码 # encoding=utf-8 from email.mime.image import MIMEImag ...

随机推荐

  1. SSM环境搭建(接口编程方式)

    一直用ssm在开发项目,之前都是直接copy别人的项目,今天趁着项目刚刚交付,自己搭建一下ssm环境,做个记录 一.创建项目.引入jar包,因为版本不一样,就不贴出这部分的内容了.个人平时的习惯是,先 ...

  2. 基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作

    在前面介绍了很多篇相关的<Bootstrap开发框架>的系列文章,这些内容基本上覆盖到了我这个Bootstrap框架的各个主要方面的内容,总体来说基本达到了一个稳定的状态,随着时间的推移可 ...

  3. 用c#开发微信 (20) 微信登录网站 - 扫描二维码登录

    像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 1 创建网站应用 在微信开放平台创建一个网站应用 https:// ...

  4. 在SQL Server里禁用聚集索引——真的好么?

    有人问了我一个最有意思的问题:“你能禁用聚集索引么?” 对这个问题,我先是吓了一跳,因为我从未想过禁用聚集索引,因为聚集索引代表表数据,对这个最有趣问题,我立即答道:“我认为可以,但是...” 好吧, ...

  5. 实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法

    关于ajax跨域调用WCF服务的方法很多,经过我反复的代码测试,认为如下方法是最为简便的,当然也不能说别人的方法是错误的,下面就来上代码,WCF服务定义还是延用上次的,如: namespace Wcf ...

  6. 三、BLE(上)

    1.      BLE 1.1       模块构成与结构体层次关系 如上图所示,BLE模块有独立的application layer,这是因为该模块可以直接从BlueCore接收数据(通过GATT模 ...

  7. git gitignore文件失效处理

    这里讲的是使用 git ignore 时候的一种特殊情况   正常你在本地给项目添加了一些文件之后,一般都会自动全部跟踪,但是在这个时候你必须编辑一个ignore文件,把一些不需要跟踪到文件ignor ...

  8. ASP.NET MVC初识

    最近在博客园看到了很多关于MVC的示例,自己打算写下来记录一下,如果有写得不对的地方,望大侠指出! 开始搭建项目 1. 建立Web项目 文件—>新建项目—>选择ASP.NET MVC4 W ...

  9. 反射(Reflection)的SetValue遇上DBNULL转换为string

    有网友回馈说提供的代码有bug.你可以从这个链接下载得到:http://www.cnblogs.com/insus/p/3384472.html 其中有一个Utility,它是把DataTable转换 ...

  10. iOS学习笔记——基础控件(上)

    本篇简单罗列一下一些常用的UI控件以及它们特有的属性,事件等等.由于是笔记,相比起来不会太详细 UIView 所有UI控件都继承于这个UIView,它所拥有的属性必是所有控件都拥有,这些属性都是控件最 ...