pysnmp 无法从不同机器接收陷阱

沙拉特

而不是 localhost IP ,我有我的 VM ip (eth0-192.168.12.20) 来接收陷阱通知,如果从 VM 外部生成一个陷阱,我不会收到任何陷阱(我正在使用另一台机器上的 snmptrap 命令)但我可以看到 SNMP当我在 VM 接口 eth0 上执行 tcpdump 时的数据。如果我使用 snmptrap 命令从同一台机器生成陷阱,我可以通过 PySNMP 陷阱接收器脚本查看陷阱数据。

尝试的选项: 1. 尝试将端口绑定到 0.0.0.0 以接收来自任何机器的陷阱 2. 在 pysnmp 中启用调试选项以获得解决问题的一些想法。从外部机器发送 snmptrap 时没有生成信息

与我的问题最接近的场景出现在以下链接中,该链接没有最终解决方案。

代码:SNMP v1 和 v2c:

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
from pysnmp.entity import engine, config
from pysnmp.entity.rfc3413 import ntfrcv

from pysnmp import debug
debug.setLogger(debug.Debug("all"))

### SNMPv2c/SNMPv1 setup
### Callback function for receiving notifications
def v2cv1CallBackFunc(snmpEngine, stateReference, contextEngineId, contextName,
                      varBinds, cbCtx):
    transportDomain, transportAddress = snmpEngine.msgAndPduDsp.getTransportInfo(stateReference)
    print transportDomain, transportAddress
    # Get an execution context...
    execContext = snmpEngine.observer.getExecutionContext(
        'rfc3412.receiveMessage:request'
    )

    # ... and use inner SNMP engine data to figure out peer address
    print('Notification from %s, ContextEngineId "%s", ContextName "%s"'
                          %('@'.join([str(x) for x in execContext['transportAddress']]),
                            contextEngineId.prettyPrint(), contextName.prettyPrint()))

    for name, val in varBinds:
        print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))


# Create SNMP engine with autogenernated engineID and pre-bound
# to socket transport dispatcher
snmpEngine = engine.SnmpEngine()

# SNMPv1/2c setup
# SecurityName <-> CommunityName mapping
config.addV1System(snmpEngine, 'my-area', "public")

# Specify security settings per SecurityName (SNMPv2c -> 1)
config.addTargetParams(snmpEngine, 'my-creds', 'my-area', 'noAuthNoPriv', 1)

# Transport setup
# UDP over IPv4, first listening interface/port
config.addSocketTransport(
    snmpEngine,
    udp.domainName + (1, ),
    udp.UdpSocketTransport().openServerMode(('0.0.0.0', 162))
)

# Register SNMP Application at the SNMP engine
ntfrcv.NotificationReceiver(snmpEngine, v2cv1CallBackFunc)

snmpEngine.transportDispatcher.jobStarted(1)  # this job would never finish

# Run I/O dispatcher which would receive queries and send confirmations
try:
    snmpEngine.transportDispatcher.runDispatcher()
except:
    snmpEngine.transportDispatcher.closeDispatcher()
    raise

提前致谢

沙拉特

我在 IT 团队的帮助下发现了这个问题。基本上,API 运行良好。

firewalld 应用程序不允许数据包通过。因此,在我将 SNMP 端口添加到防火墙例外列表后,它使我的代码正常工作。

我使用的命令:

  • sudo firewall-cmd --add-port=161-162/udp --zone=public --permanent
  • 须藤 systemctl 重启网络
  • 须藤 systemctl 重新加载 firewalld

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 PySNMP 获取陷阱发送者的 IP

来自分类Dev

如果使用SNMPv1未找到多个oid,Pysnmp将无法获取多个oid

来自分类Dev

PySNMP代理的MIB

来自分类Dev

使PySNMP解析对象ID

来自分类Dev

使用pysnmp获取输出

来自分类Dev

PySNMP hexValue到IP

来自分类Dev

如何使用pysnmp遍历子表

来自分类Dev

PySNMP NameError:未定义名称“ getCmd”

来自分类Dev

Pysnmp命令响应程序包装器

来自分类Dev

pysnmp 发送请求不起作用

来自分类Dev

PySNMP 添加自定义 MIB

来自分类Dev

来自不同机器的不同nmap结果?

来自分类Dev

不同机器上的不同内核版本

来自分类Dev

pysnmp.smi.error.SmiError:尝试使用 pysnmp 打开 apc 插座时没有符号错误

来自分类Dev

不同机器上的DNS和DHCP

来自分类Dev

Django 应用程序无法从不同的机器打开

来自分类Dev

pysnmp如何避免CPU使用率过高

来自分类Dev

解析或拆分pysnmp输出以更新到数据库

来自分类Dev

使用pysnmp从MIB文本约定转换OID值对

来自分类Dev

如何在PySNMP中标准化OID索引检索?

来自分类Dev

使用pysnmp从MIB文本约定转换OID值对

来自分类Dev

pysnmp prettyPrint()关于十六进制数的问题

来自分类Dev

从远程主机执行GETNEXT时,PySNMP代理超时

来自分类Dev

带有HOST-RESOURCES-MIB的pysnmp代理

来自分类Dev

PySNMP 未找到现有的 JUNIPER-SMI 模块

来自分类Dev

如何使用pysnmp在代理端实现SET和TRAP?

来自分类Dev

pysnmp - 使用变量设置 v3 auth & priv tpyes

来自分类Dev

从文件加载自定义 mib 的 pySNMP 代理

来自分类Dev

带有 PYSNMP F5 ltm 的 Python SNMP