snmpwalk 与 PySNMP

2024-04-14

我想重现以下 SNMP 命令的行为:

snmpwalk -v2c -cpublic 192.168.0.10 1.3.6.1.2.1.25.2.3.1.3

这给了我这个输出:

iso.3.6.1.2.1.25.2.3.1.3.1 = STRING: "Physical memory"
iso.3.6.1.2.1.25.2.3.1.3.3 = STRING: "Virtual memory"
iso.3.6.1.2.1.25.2.3.1.3.6 = STRING: "Memory buffers"
iso.3.6.1.2.1.25.2.3.1.3.7 = STRING: "Cached memory"
iso.3.6.1.2.1.25.2.3.1.3.8 = STRING: "Shared memory"
iso.3.6.1.2.1.25.2.3.1.3.10 = STRING: "Swap space"
iso.3.6.1.2.1.25.2.3.1.3.31 = STRING: "/"
iso.3.6.1.2.1.25.2.3.1.3.37 = STRING: "/run"
iso.3.6.1.2.1.25.2.3.1.3.39 = STRING: "/dev/shm"
iso.3.6.1.2.1.25.2.3.1.3.40 = STRING: "/run/lock"
iso.3.6.1.2.1.25.2.3.1.3.41 = STRING: "/sys/fs/cgroup"
iso.3.6.1.2.1.25.2.3.1.3.59 = STRING: "/tmp"
iso.3.6.1.2.1.25.2.3.1.3.60 = STRING: "/run/cgmanager/fs"
iso.3.6.1.2.1.25.2.3.1.3.61 = STRING: "/run/user/112"
iso.3.6.1.2.1.25.2.3.1.3.63 = STRING: "/run/user/0"

所以我尝试了这段代码:

#!/usr/bin/env python3
from pysnmp.hlapi import *

def walk(host, oid):
    for (errorIndication,errorStatus,errorIndex,varBinds) in nextCmd(SnmpEngine(), 
        CommunityData('public'), UdpTransportTarget((host, 161)), ContextData(), 
        ObjectType(ObjectIdentity(oid))):
        if errorIndication:
            print(errorIndication, file=sys.stderr)
            break
        elif errorStatus:
            print('%s at %s' % (errorStatus.prettyPrint(),
                                errorIndex and varBinds[int(errorIndex) - 1][0] or '?'), 
                                file=sys.stderr)             
            break
        else:
            for varBind in varBinds:
                print(varBind)

walk('192.168.0.10','1.3.6.1.2.1.25.2.3.1.3')

问题是它返回了很多不需要的 OID……

我尝试了不同的东西,比如使用getCmd()功能,但我无法让它按照我想要的方式工作。

我可以打电话给外部snmpwalk命令,但我更喜欢使用 Python 模块找到解决方案。

有什么想法可以帮助我吗?


尝试通过词典模式 http://pysnmp.sourceforge.net/docs/hlapi/asyncore/sync/manager/cmdgen/nextcmd.html#pysnmp.hlapi.nextCmd的关键字参数nextCmd()。例如:

for (errorIndication,
     errorStatus,
     errorIndex,
     varBinds) in nextCmd(SnmpEngine(), 
                          CommunityData('public'),
                          UdpTransportTarget((host, 161)),
                          ContextData(),                                                           
                          ObjectType(ObjectIdentity(oid)),
                          lexicographicMode=False):
    ...

这应该具有通过您提供的初始 OID 限制 SNMP 遍历的效果(假设您提到的不需要的 OID 是那些超出前缀的 OID)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

snmpwalk 与 PySNMP 的相关文章

随机推荐

  • 静态变量的线程安全初始化

    我一直在使用这种模式来初始化类中的静态数据 对我来说 它看起来是线程安全的 但我知道线程问题有多么微妙 这是代码 public class MyClass bad code do not use static string myResour
  • Jasmine:测试 setTimeout 函数抛出错误

    我想测试一个方法的错误处理 该方法使用 setTimeout 安排工作 该错误将在预定部分抛出 即 function sutWithSetTimeout setTimeout function throw new Error pang 1
  • `scipy.ndimage.zoom` 与 `order=0` 的 `skimage.transform.rescale`

    我正在创建一个彩色灰度图像来显示图像块的分类 我需要使用零阶对低分辨率分类图像进行上采样以匹配原始图像大小 When I use skimage transform rescale I 16 order 0 I get the desire
  • Vue.js $children 按组件名称

    我正在尝试按名字访问特定的孩子 目前 由于孩子所在的位置 我这样称呼孩子 this root children 0 没关系 只要那个孩子总是 0 但如果有一种方法可以做类似的事情那就太好了 this root children detail
  • Expo 应用程序:任何导航器均未处理“TOGGLE_DRAWER”操作

    我试图从 MealsNavigator 导航中显示一个抽屉 到目前为止 我导入了 ff 必需品 import React from react import NavigationContainer from react navigation
  • 将此字符串转换为时间戳 PHP [重复]

    这个问题在这里已经有答案了 我有这个字符串 13 10 15 00 我想将其转换为时间戳 但是当我这样做时 timestamp strtotime 13 10 15 00 它返回一个空值 在你的代码中strtotime 正在尝试转换13 1
  • 从单线程进行 COM 调用会挂起线程

    我有一个应用程序 可以通过自动化插件执行一些 Excel 自动化操作 该加载项是多线程的 所有线程都设法调用 Excel COM 对象 由于 Excel 在进行多次调用时有时会返回 忙 异常 因此我将所有调用包装在 重试 函数中 但我觉得这
  • 如何从 page.open 发出的请求中查看 HTTP 状态代码?

    我有一个 phantomJS 脚本 其中包含以下内容 page open url function status if status fail handle failure 状态检查有时会起作用 但即使请求返回 500 状态仍然是 成功 如
  • 如何使用 jQuery 的 $.ajax() 函数来运行 php 脚本? [复制]

    这个问题在这里已经有答案了 为了使这一点易于理解 我制作了一个示例代码 因为我的实际代码要大得多 基本上我想要完成的是运行我的 PHP 脚本 使用 ajax 编辑 XML 文件 这是因为我需要在我的实际项目中的 javascript 中执行
  • 使用 12 GB 内存运行 Dart

    I am using 16 GB RAM on my Pc This started happening while working without any reason as far as I no This always happens
  • docker compose MySQL 容器 [2002] 连接被拒绝

    我正在尝试为 Nginx PHP Laravel MySQL 构建 docker compose 容器 但我不断收到连接被拒绝错误 docker compose yml version 3 services nginx image ngin
  • Laravel 带有约束的急切加载

    所以我的模型有两个简单的关系 然后急切加载就像这样完美地工作 Entry with author lastModifiedBy gt 但是假设我想添加一个带有约束的新关系 例如 public function foo return this
  • iOS SDK Hue 飞利浦与 Swift

    我尝试在 Objective C 中为 Hue 导入 iOS SDK 我按照这里的说明进行操作 https github com PhilipsHue PhilipsHueSDK iOS OSX https github com Phili
  • 为什么 Camera.setParameters(Camera.Parameters) 不适用于索尼爱立信 X10 和 Droid?

    在索尼爱立信 X10 或 Droid 上使用相机 API 时 有人遇到过奇怪的行为吗 例如 以下代码不适用于这些设备 结果 我在市场上收到了很多负面反馈 导致许多订单被取消 mParameters set rotation orientat
  • 我可以向内置 Python 类型添加自定义方法/属性吗?

    例如 假设我想添加一个helloWorld Python 的 dict 类型的方法 我可以这样做吗 JavaScript 有一个以这种方式运行的原型对象 也许这是糟糕的设计 我应该对 dict 对象进行子类化 但它只适用于子类 我希望它适用
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • 设置任意深度的嵌套列表样式

    我想知道是否可以仅使用 CSS 来设置嵌套无序列表的样式 而不使用任何脚本 问题是 CSS 需要适用于列表树的任何深度 例如 我有一个列表 ul li Item 1 li li Item 2 li li Item 3 li li class
  • 在 Mocha 中处理未随 npm 安装的依赖项?

    我有一个正在运行的 Node 应用程序 我正在尝试添加 Mocha 测试 但遇到了一些奇怪的导入错误 这是我的文件结构 package json index js src chart js test test chart js 这就是我的c
  • 如何使用灵活的数组成员初始化结构

    我有以下结构 typedef struct person int age char sex char name person 我已经做了一些基本的互联网搜索 但不成功 了解如何创建实例并使用灵活的数组成员初始化结构而不使用malloc 例如
  • snmpwalk 与 PySNMP

    我想重现以下 SNMP 命令的行为 snmpwalk v2c cpublic 192 168 0 10 1 3 6 1 2 1 25 2 3 1 3 这给了我这个输出 iso 3 6 1 2 1 25 2 3 1 3 1 STRING Ph