【问题标题】:snmpd pass to run pythonsnmpd 通过运行 python
【发布时间】:2018-10-09 11:36:44
【问题描述】:

我试图通过 snmp 查询 modbus 设备,使用 snmpd 传递 python 脚本来检索数据。

#! /bin/bash
if [ "$1" = "-g" ]
then
echo .1.3.6.1.4.1.52612.10.3.1
echo string
python /usr/local/bin/readvolt.py
fi
exit 0

这是 readvolt.py 的样子:

#!/usr/bin/python
import minimalmodbus
eqp = minimalmodbus.Instrument('/dev/ttyUSB0',1) # port name, slave address (in decimal)
# skip some other lines for serial port initialization
volt = eqp.read_float(0,4,2) # getting data from serial modbus
print volt

我的 snmpd.conf 中的这一行:

pass .1.3.6.1.4.1.52612.10.3.1 /bin/sh /usr/local/bin/volt.sh

我的问题:我从 python 获得了回溯,找不到 minimummodbus 模块,但是当我尝试直接从主机运行 readvolt.py 时,它按预期工作(它可以打印出结果(伏特))

pi@raspberrypi:/usr/local/bin $ readvolt.py
220.25

我还尝试使用简单的 python 脚本 (test.py) 以确保 snmpd pass 是否可以在 snmp 管理器的 snmpget 响应时运行 python 脚本

#!/usr/bin/python
import sys
print "test"

运行正常:

suryo@r50e:~$ snmpwalk -v2c -c public 192.168.1.5 .1.3.6.1.4.1.52612.10.3.1
iso.3.6.1.4.1.52612.10.3.1 = STRING: "test"
suryo@r50e:~$ 

这里有什么问题?似乎python在通过snmpd pass运行时无法导入外部模块。 我在想如果这是一个访问控制问题,Debian-snmp 没有权限访问串行端口..

【问题讨论】:

    标签: python-2.7 snmpd minimalmodbus


    【解决方案1】:

    通过找出 snmpd 守护程序的用户名解决了问题。我将 whoami 放入脚本并获得了 'Debian-snmp',然后变得直截了当,通过运行检查组成员身份:

    pi@rraspberrypi:~$ groups Debian-snmp
    Debian-snmp : Debian-snmp
    

    将 Debian-snmp 加入拨出成员以授予对串行端口的完全访问权限:

    pi@raspberrypi:~ $ sudo usermod -a  -G dialout Debian-snmp
    

    重新启动 snmpd 以使用新成员身份登录,瞧..它可以从 snmp 命令 /snmpget 读取从 modbus 设备

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 2023-04-08
      • 2016-07-15
      • 2017-09-08
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多