文章目錄
- 1、安裝snmp
- 2、設定v3
- 3、python實作snmp服務
- 4、附加
1、安裝snmp
1、centos7+yum安裝
yum -y install net-snmp net-snmp-utils
2、更改組態檔snmpd.conf
vi /etc/snmp/snmpd.conf
添加社區為public,名為notConfigUser


重啟(每次修改完組態檔都需要重啟)
systemctl restart snmpd
3、測驗
1、查看tcp、udp埠開放
netstat -tulnp
# 查詢主機資訊
snmpwalk -v 2c -c public 10.0.12.59 system
出現如下內容代表成功

2、設定v3
1、停掉服務
systemctl stop snmpd
2、設定
net-snmp-create-v3-user

建議密碼設定長一點,不然會設定失敗
tail -n 5 /var/lib/net-snmp/snmpd.conf

3、驗證
snmpwalk -v3 -usuperuser -lauth -A "snmpv3@2020md5" -X "snmpv3@2020des" 10.0.12.59

如出現如下報錯,證明設定失敗,原因可能是密碼設定太短

需要重新設定密碼
3、python實作snmp服務
# @DESC :實作snmp協議(簡單網路管理協議),只有安裝了snmp系統(管理資訊庫(MIB)、管理資訊結構(SMI)及SNMP報文協議)的主機才會有回應
# 使用snmpwalk -v -2c -c public ip system 查看作業系統資訊 (snmpbulkwalk代替snmpwalk)
# -v:指定snmp的版本, 1或者2c或者3
# –c:指定連接設備SNMP密碼,
# snmp能夠獲取系統資訊,記憶體資訊,cpu資訊,磁盤資訊,有對應的oid
import datetime
import os
import shlex
import signal
import subprocess
from pysnmp.hlapi import *
# 獲取系統資訊
def run_snmp(host, public='public', v=1, timeout=3,authuser="superuser",md5pwd="snmpv3@2020md5",secpwd="snmpv3@2020des"):
"""
:param host: ip
:param public: 社區名
:param v: 版本1:v2,0:v1
:param timeout: 超時時間
:param authuser: v3 認證用戶
:param md5pwd: md5 加密密碼
:param secpwd: sec 假面描姆
:return:
"""
if v == 0 or v == 1:
errorIndication, errorStatus, errorIndex, varBinds = next(getCmd(
SnmpEngine(),
CommunityData(public, mpModel=v),
UdpTransportTarget((host, 161), timeout=timeout),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)))
)
if varBinds:
return ' = '.join([x.prettyPrint() for x in varBinds])
else:
# v3進行驗證
command = 'snmpwalk -v3 -u{authuser} -lauth -A "{md5pwd}" -X "{secpwd}" {host} sysDescr'.format(
authuser=authuser, md5pwd=md5pwd, secpwd=secpwd, host=host)
command_split = shlex.split(command)
process = subprocess.Popen(command_split, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
start_time = datetime.datetime.now()
try:
while process.poll() is None:
now_time = datetime.datetime.now()
if (now_time-start_time).seconds > 3:
try:
os.kill(process.pid,signal.SIGTERM)
except OSError as e:
print(e,process.pid)
stdout,stderr = process.communicate()
return stdout.decode()
except:
return False
def analysis_snmp(snmp_str):
"""
決議snmp回應
:param snmp_str: SNMPv2-MIB::sysDescr.0 = Linux localhost.localdomain 3.10.0-1127.18.2.el7.x86_64 #1 SMP Sun Jul 26 15:27:06 UTC 2020 x86_64
:return: {"version":"3.10.0-1127.18.2.el7.x86_64","os":"Linux"}
"""
msg = {}
print('snmp_str',snmp_str)
if isinstance(snmp_str, str):
pattern = r'\d+\.(?:\w+\.)*\w+'
version_ = re.findall(pattern, snmp_str)
version = "-".join(version_)
print('版本資訊為:', version)
msg['version'] = version
ospatter = r'SNMPv2-MIB::sysDescr.0 = (?:[a-zA-Z0-9]+[ |-]?[a-zA-Z0-9])*'
os_ = re.findall(ospatter, snmp_str)
os = "".join(os_).replace("SNMPv2-MIB::sysDescr.0 = ", "")
msg['os'] = os
print('系統/設備為:', os)
return msg
if __name__ == '__main__':
import re
# host_list = ['10.0.12.59','10.0.12.57','10.0.10.1','10.0.10.255','10.0.10.254']
for i in host_list:
str_msg = run_snmp(i)
analysis_snmp(str_msg)
Snmp_trap()
4、附加
設定修改(僅限v1,v2,因為v3我還不會)
在組態檔中添加
rwcommunity private default
rwcommunity6 private default

驗證:
snmpset -c private -v 1 ip SNMPv2-MIB::sysName.0 s ubuntu

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/222137.html
標籤:其他
上一篇:Python 漢字轉url 引數
