标签: pysnmp

PySNMP无法识别响应

我使用以下简单脚本:

from pysnmp.entity.rfc3413.oneliner import cmdgen

errorIndication, errorStatus, errorIndex, \
varBindTable = cmdgen.CommandGenerator().bulkCmd(
            cmdgen.CommunityData('test-agent', 'public'),
            cmdgen.UdpTransportTarget(('IP.IP.IP.IP', 161)),
            0,
            1,
            (1,3,6,1,2,1,4,24,4,1,2,169,254)
        )

if errorIndication:
   print errorIndication
else:
    if errorStatus:
        print '%s at %s\n' % (
            errorStatus.prettyPrint(),
            errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'
            )
    else:
        for varBindTableRow in varBindTable:
            for name, val in varBindTableRow:
                print '%s = %s' % (name.prettyPrint(), val.prettyPrint())
Run Code Online (Sandbox Code Playgroud)

从命令行使用snmpwalk到此设备返回预期结果.但脚本返回超时之前未收到SNMP响应.如果我省略这个OID,那么一切正常.所以问题在于这个OID

这里tcpdump统计:

/usr/sbin/tcpdump -nn -vv -s0 -A host HOST and udp

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

12:15:31.494920 …
Run Code Online (Sandbox Code Playgroud)

python snmp mib pysnmp

5
推荐指数
1
解决办法
1866
查看次数

如何将我的私有 MIB 文件转换为 .py 格式,以便我可以在我的设备上执行 GET/SET 操作

我正在尝试编写一个脚本来在我的设备上执行 GET/SET 命令。当我尝试对 sysDescr(它是标准 MIB SNMPv2 的一部分)执行 GET 操作时,我设法得到了响应。我尝试以几种不同的方式使用 mibdump.py 脚本,以便转换我的专有 MIB 文件,以便我以后可以使用它们:

  1. 使用 .mib 扩展名激活特定 MIB 文件(见结果)上的 mibdump.py

     c:\Program Files\Python35\Scripts>python mibdump.py SL-XPDR.mib
        Source MIB repositories: file:///usr/share/snmp/mibs, h ttp://mibs.snmplabs.com/a
        sn1/@mib@
        Borrow missing/failed MIBs from: h ttp://mibs.snmplabs.com/pysnmp/notexts/@mib@
        Existing/compiled MIB locations: pysnmp.smi.mibs, pysnmp_mibs
        Compiled MIBs destination directory: C:\Users\alpha_2.PL\PySNMP   Configuration\mibs
        MIBs excluded from code generation: RFC-1212, RFC-1215, RFC1065-SMI, RFC1155-SMI
        , RFC1158-MIB, RFC1213-MIB, SNMP-FRAMEWORK-MIB, SNMP-TARGET-MIB,   SNMPv2-CONF, SN
        MPv2-SMI, SNMPv2-TC, SNMPv2-TM, TRANSPORT-ADDRESS-MIB
        MIBs to compile: SL-XPDR
        Destination format: pysnmp
        Parser grammar cache directory: not used …
    Run Code Online (Sandbox Code Playgroud)

python snmp pysnmp

4
推荐指数
1
解决办法
7251
查看次数

如何使用pysnmp获取SNMP数据?

我想通过使用 python pysnmp 模块获取 snmp 数据。我曾经使用命令行来获取 SNMP 数据,但现在我想使用 pysnmp 模块来读取它。

SNMP命令-

snmpwalk -v 1 -c public <ip address>:<port> xyz::pqr
Run Code Online (Sandbox Code Playgroud)

我正在使用像上面这样的命令。现在我尝试了类似下面的东西 -

import netsnmp

def getmac():
    oid = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.2.2.1.2'))
    res = netsnmp.snmpgetbulk(oid, Version = 1, DestHost='ip',
                           Community='pub')
    return res

print getmac()
Run Code Online (Sandbox Code Playgroud)

我遇到错误 -导入 netsnmp。没有模块 netsnmp

任何人都可以给我建议如何使用 python 从 snmp 服务器获取 snmp 数据?

python snmp net-snmp pysnmp

4
推荐指数
1
解决办法
2万
查看次数

使用 PySNMP 的 snmpwalk

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

snmpwalk -v2c -cpublic 192.168.0.10 1.3.6.1.2.1.25.2.3.1.3
Run Code Online (Sandbox Code Playgroud)

这给了我这个输出:

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"
Run Code Online (Sandbox Code Playgroud)

所以我尝试了这个代码:

#!/usr/bin/env python3
from pysnmp.hlapi …
Run Code Online (Sandbox Code Playgroud)

snmp python-3.x pysnmp

4
推荐指数
1
解决办法
1万
查看次数

python pysnmp使用getbulk中的oid列表

大家好我正在寻找一个解决方案,以同时获得多个oid.例如,是否可以在pysnmp get命令生成器中使用oid列表?

由此:

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.bulkCmd(
    cmdgen.CommunityData('public'),
    cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)),
    0, 25,
    '1.3.6.1.2.1.2.2.1.2',
    '1.3.6.1.2.1.2.2.1.3',
)
Run Code Online (Sandbox Code Playgroud)

类似于:

myoid = ['1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.6.0', '1.3.6.1.2.1.1.6.0']

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.bulkCmd(
    cmdgen.CommunityData('public'),
    cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)),
    0, 25,
    myoids,
)
Run Code Online (Sandbox Code Playgroud)

实际的问题是oids是变量所以我正在寻找一种方法来轻松地改变它们.

python snmp pysnmp

3
推荐指数
1
解决办法
1669
查看次数

PySNMP错误:pysnmp.smi.error.SmiError

我在Windows XP计算机上运行Python程序。运行程序时,出现以下错误:

File "C:\Python27\lib\pysnmp\smi\builder.pyt, line 230, in loadModules...
pysnmp.smi.error.SmiError: MIB file "SNMPv2-MIB.py[co]" not found in search path
Run Code Online (Sandbox Code Playgroud)

SNMPv2-MIB.py文件当前位于中C:\Python27\Lib\pysnmp\smi\mibs。有谁知道我该怎么解决?

python pysnmp

2
推荐指数
1
解决办法
8384
查看次数

PySNMP使用MIB文件时出错

我正在尝试在PySNMP中使用MIB文件.代码相当简单.没什么复杂的.只是试图在OID下获取信息.我正在使用的代码如下:

#!/usr/local/bin/python2.7

from pysnmp.smi import builder, view, error
from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()
mibBuilder = builder.MibBuilder()
mibPath = mibBuilder.getMibPath() + ( '/path/to/command/mibs', )
mibBuilder.setMibPath( *mibPath )
mibBuilder.loadModules( 
    'MIB-File',
    )
mibView = view.MibViewController( mibBuilder )
errorIndication, errorStatus, errorIndex, \
                 varBindTable = cmdGen.nextCmd( 
    cmdgen.CommunityData( 'Name', 'Community' ),
    cmdgen.UdpTransportTarget( ( 'IP Address', 161 ) ),
    ( ( '', 'serverName' ), ),
    )

print varBindTable
Run Code Online (Sandbox Code Playgroud)

我知道放入此数据的数据是准确的,因为当我使用asynCommandGenerator.asyncNextCmd相同的数据时udpTransportTarget,CommunityData它的工作没有问题.此外,我看到的错误非常特定于MibBuilder组件.

我看到的错误是:

Traceback(最近一次调用最后一次):

文件"./snmpcollectortest.py",第11行,in

'NS-MIB-SMIv2的',

在loadModules中输入文件"/usr/lib/python2.7/site-packages/pysnmp-4.2.1-py2.7.egg/pysnmp/smi/builder.py",第221行

pysnmp.smi.error.SmiError:MIB模块"/path/to/command/mibs/MIB-File.py"加载错误:搜索路径中找不到MIB文件"ASN1.py [co]"

更新:

我发现我没有安装M2Crypto,这就是为什么我找不到ASN1.py. 不过我已经纠正了这一点,我仍然得到同样的错误.

python mib pysnmp

2
推荐指数
1
解决办法
4567
查看次数

PYSNMP:TypeError:setComponentByType()获取关键字参数'verifyConstraints'的多个值

面对PYSNMP 4.3.3的新问题.Python 2.7.13.With SNMP GET和Getnext:与Pysnmp 4.3.2一样正常.实际上我正在观察它与虚拟环境有关的问题.在虚拟环境中,即使我将Pysnmp从4.3.3降级到4.3.2,问题也会被重现.

有人可以告诉我我错过了什么吗?

TypeError:setComponentByType()获取关键字参数'verifyConstraints'的多个值

>>> from pysnmp.hlapi import *
>>> errorIndication, errorStatus, errorIndex, varBinds = next(
...     getCmd(SnmpEngine(),
...            CommunityData('public'),
...            UdpTransportTarget(('127.0.0.1', 161)),
...            ContextData(),
...            ObjectType(ObjectIdentity('SNMPv2-MIB','sysDescr', 0)))
... )
Traceback (most recent call last):
  File "<stdin>", line 6, in <module>
  File "/home/sourav/MyWorkSpace/tempproject_1/lib/python2.7/site-packages/pysnmp/hlapi/asyncore/sync/cmdgen.py", line 111, in getCmd
    lookupMib=options.get('lookupMib', True)))
  File "/home/sourav/MyWorkSpace/tempproject_1/lib/python2.7/site-packages/pysnmp/hlapi/asyncore/cmdgen.py", line 131, in getCmd
    options.get('cbFun'), options.get('cbCtx'))
  File "/home/sourav/MyWorkSpace/tempproject_1/lib/python2.7/site-packages/pysnmp/entity/rfc3413/cmdgen.py", line 214, in sendVarBinds
    v2c.apiPDU.setVarBinds(reqPDU, varBinds)
  File "/home/sourav/MyWorkSpace/tempproject_1/lib/python2.7/site-packages/pysnmp/proto/api/v1.py", line 136, in setVarBinds
    varBindList.getComponentByPosition(idx), varBind
  File "/home/sourav/MyWorkSpace/tempproject_1/lib/python2.7/site-packages/pysnmp/proto/api/v1.py", line …
Run Code Online (Sandbox Code Playgroud)

snmp python-2.7 pysnmp

2
推荐指数
1
解决办法
884
查看次数

如何正确访问pysnmp陷阱中返回的varBinds

我正在使用python 2.7并尝试使用pysnmp捕获SNMP陷阱。我正在使用http://pysnmp.sourceforge.net/examples/current/v1arch/manager/ntfrcv/v2c-multiple-transports.html中的示例。我在从varBinds正确获取键/值时遇到问题。示例代码似乎无法正常工作。
完整代码:

from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher
from pysnmp.carrier.asynsock.dgram import udp, udp6
from pyasn1.codec.ber import decoder
from pysnmp.proto import api

def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg):
    while wholeMsg:
        msgVer = int(api.decodeMessageVersion(wholeMsg))
        if msgVer in api.protoModules:
            pMod = api.protoModules[msgVer]
        else:
            print('Unsupported SNMP version %s' % msgVer)
            return
        reqMsg, wholeMsg = decoder.decode(
            wholeMsg, asn1Spec=pMod.Message(),
            )
        print('Notification message from %s:%s: ' % (
            transportDomain, transportAddress
            )
        )
        reqPDU = pMod.apiMessage.getPDU(reqMsg)
        if reqPDU.isSameTypeWith(pMod.TrapPDU()):
            if msgVer == api.protoVersion1:
                j = pMod.apiTrapPDU.getEnterprise(reqPDU)
                print 'Enterprise: ({})'.format(str(j)) …
Run Code Online (Sandbox Code Playgroud)

python pysnmp

2
推荐指数
1
解决办法
1708
查看次数

Python SNMP 陷阱接收器

我在Python3中收到一条SNMP陷阱消息,我得到了一个十六进制数字。

如何将其转换为字符串以便我可以看到它?

接收数据(十六进制)

b'0E\x02\x01\x01\x04\x06404040\xa78\x02\x04\x00\xf6\x17~\x02\x01\x00\x02\x01\x000*0\x0f\x06\x08+\x06\x01 \x02\x01\x01\x03\x00C\x03\x01k+0\x17\x06\n+\x06\x01\x06\x03\x01\x01\x04\x01\x00\x06\t+\x06\x01\x06 \x03\x01\x01\x05\x01'

这是我的 SNMP 陷阱接收器代码

import socket
import sys

port = 162
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", port))
while 1:
        data, addr = s.recvfrom(4048)
        print(data)
Run Code Online (Sandbox Code Playgroud)

这是我的 SNMP 陷阱发件人代码

from pysnmp.hlapi.asyncore import *

snmpEngine = SnmpEngine()
sendNotification(
    snmpEngine,
    CommunityData('404040'),
    UdpTransportTarget(('192.168.0.160', 162)),
    ContextData(),
    'trap',
    NotificationType(ObjectIdentity('SNMPv2-MIB', 'coldStart')),
 )

snmpEngine.transportDispatcher.runDispatcher()
Run Code Online (Sandbox Code Playgroud)

python snmp pysnmp snmp-trap

2
推荐指数
1
解决办法
2万
查看次数

PySnmp 查询不适用于可到达的目标,但命令行“snmpget”成功

我需要一个可以监视 SNMP 代理的 SNMP 服务器。为此,我编写了一个基本的Python应用程序,并运行了一个SNMP代理(基于polinux/snmpd图像),在同一网络上,该代理具有固定的IP地址。当我从服务器容器运行 SNMP get 查询时,我得到了所需的 OIB,但是当我想使用 PySnmp 以编程方式执行相同操作时,它不起作用。我尝试了很多方法但没有成功。

你有什么主意吗?

我的泊坞窗撰写文件:

services:
  spm-health-service:
    build:
      context: .
      dockerfile: docker/Dockerfile
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "4500:4500"
    depends_on:
      - scs-server
      - network-device-identifier

  spm:
    image: polinux/snmpd
    restart: unless-stopped
    privileged: true
    ports:
      - "161:161/udp"
    volumes:
      - ./resources/snmpd-conf/snmpd.conf:/etc/snmp/snmpd.conf
      - ./resources/spm-mib/:/usr/local/share/snmp/mibs/
    networks:
      default:
        ipv4_address: 10.5.0.5

networks:
  default:
    driver: bridge
    ipam:
      config:
        - subnet: 10.5.0.0/16
          gateway: 10.5.0.1

Run Code Online (Sandbox Code Playgroud)

当我进入“spm-health-service”的bash shell时,我的命令和结果:

$ winpty docker exec -it 627 bash
root@627d241920e3:/app# snmpget -v2c -t 10 -c …
Run Code Online (Sandbox Code Playgroud)

python snmp mib pysnmp docker-compose

0
推荐指数
1
解决办法
2778
查看次数