Конфигурация агента SNMP windows/linux
Мне нужно получить информацию через snmp, а затем использовать эту информацию для создания своего рода графического приложения в Unity.
Я нахожу библиотеку SnmpSharp http://www.snmpsharpnet.com/
Я создаю небольшую программу в единстве, используя эту библиотеку, а затем я установил snmp на мой компьютер с Windows (используя официальное руководство Windows), на localhost это работает!
Теперь моя проблема в том, как я могу подключиться к другому агенту в локальной сети? Как установить агент на моем другом устройстве, например, на ПК с Linux? я немного сбит с толку, потому что я пытаюсь установить snmp на другой компьютер с Windows, но я не могу получить информацию snmp с него; я пытаюсь установить агент snmp на ПК с Linux, но я не понимаю, как правильно установить агент, который должен общаться через мою локальную сеть
Это код, который работает на локальном хосте
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using SnmpSharpNet;
using System.Net;
public class SNMP_walk : MonoBehaviour {
[SerializeField] public InputField community_str;
[SerializeField] public InputField agent_ip_address;
[SerializeField] public Button MyButton ;
string str_community = null;
string ip = null;
void Start () {
//test button
MyButton.onClick.AddListener (() => {
str_community = community_str.text;
ip = agent_ip_address.text;
Debug.Log (str_community);
Debug.Log(ip);
snmp_walk (str_community, ip);
});
}
// Update is called once per frame
void Update () {
}
void snmp_walk(string str_community, string ip){
OctetString community = new OctetString (str_community);
// Define agent parameters class
AgentParameters param = new AgentParameters (community);
// Set SNMP version to 1 (or 2)
// settare in base alla versione usata
param.Version = SnmpVersion.Ver1;
// Construct the agent address object
// IpAddress class is easy to use here because
// it will try to resolve constructor parameter if it doesn't *
// parse to an IP address
IpAddress agent = new IpAddress (ip);
// Construct target
// IP, port,timeout,retry
UdpTarget target = new UdpTarget ((IPAddress)agent, 161, 4000, 2);
//necessario per tutte le richieste
Pdu pdu = new Pdu (PduType.Get);
pdu.VbList.Add ("1.3.6.1.2.1.1.1.0"); //sysDescr
pdu.VbList.Add("1.3.6.1.2.1.1.2.0"); //sysObjectID
pdu.VbList.Add("1.3.6.1.2.1.1.3.0"); //sysUpTime
pdu.VbList.Add("1.3.6.1.2.1.1.4.0"); //sysContact
pdu.VbList.Add("1.3.6.1.2.1.1.5.0"); //sysName
pdu.VbList.Add ("1.3.6.1.2.1.25.2.2.0"); //Load for one core
//pdu.VbList.Add ("1.3.6.1.2.1.25.6.3.1.1.11"); //Memory ? occupata
//pdu.VbList.Add ("1.3.6.1.2.1.25.3.3.1.2.4"); //CPU ?
SnmpV1Packet result = (SnmpV1Packet)target.Request (pdu, param);
// If result is null then agent didn't reply or we couldn't parse the reply.
if (result != null) {
// ErrorStatus other then 0 is an error returned by
// the Agent - see SnmpConstants for error definitions
if (result.Pdu.ErrorStatus != 0) {
// agent reported an error with the request
Debug.Log ("Error in SNMP reply. Error {"+result.Pdu.ErrorStatus+"} " +
"index {"+result.Pdu.ErrorIndex+"}");
} else {
// Reply variables are returned in the same order as they were added
// to the VbList
Debug.Log ("sysDescr({"+result.Pdu.VbList [0].Oid.ToString ()+"}) " +
"({"+SnmpConstants.GetTypeName (result.Pdu.VbList [0].Value.Type)+"}): " +
"{"+result.Pdu.VbList [0].Value.ToString ()+"}");
Debug.Log("sysObjectID({"+result.Pdu.VbList [1].Oid.ToString ()+"}) " +
"({"+SnmpConstants.GetTypeName (result.Pdu.VbList [1].Value.Type)+"}): " +
"{"+result.Pdu.VbList [1].Value.ToString ()+"}");
Debug.Log("sysUpTime(({"+result.Pdu.VbList [2].Oid.ToString ()+"}) " +
"({"+SnmpConstants.GetTypeName (result.Pdu.VbList [2].Value.Type)+"}): " +
"{"+result.Pdu.VbList [2].Value.ToString ()+"}");
Debug.Log("sysContact(({"+result.Pdu.VbList [3].Oid.ToString ()+"}) " +
"({"+SnmpConstants.GetTypeName (result.Pdu.VbList [3].Value.Type)+"}): " +
"{"+result.Pdu.VbList [3].Value.ToString ()+"}");
Debug.Log("sysName(({"+result.Pdu.VbList [4].Oid.ToString ()+"}) " +
"({"+SnmpConstants.GetTypeName (result.Pdu.VbList [4].Value.Type)+"}): " +
"{"+result.Pdu.VbList [4].Value.ToString ()+"}");
Debug.Log("Total Mem ({"+result.Pdu.VbList [5].Oid.ToString ()+"}) " +
"({"+SnmpConstants.GetTypeName (result.Pdu.VbList [5].Value.Type)+"}): " +
"{"+result.Pdu.VbList [5].Value.ToString ()+"}");
/* Debug.Log("CPU ? " + result.Pdu.VbList[6].Oid.ToString()+
SnmpConstants.GetTypeName(result.Pdu.VbList[6].Value.Type)+
result.Pdu.VbList[6].Value.ToString());*/
}
} else {
Debug.Log ("No response received from SNMP agent.");
}
target.Close ();
}
}
Спасибо за вашу помощь и извините за мой английский!
1 ответ
По умолчанию после установки SNMP-агент в Windows разрешает запросы только от localhost.
Чтобы разрешить удаленные запросы SNMP, вам нужно настроить службу SNMP:
открыто
Windows Services Manager
Щелкните правой кнопкой мыши на
SNMP Service
и редактироватьProperties
Выбрать
Security
табуляция
Отсюда добавьте удаленные хосты, которым разрешено запрашивать ваш агент SNMP.
Редактировать:
Я знаю, что это может просто ответить на часть вашего вопроса: Невозможно запросить агент SNMP для Windows с хостов, отличных от localhost.
Как установить / настроить SNMP-агент в Linux - это совсем другой вопрос, описывающий, что вы пробовали, а что не работает.
Обзор / отладка кода C# должен быть опубликован на дочернем сайте SF: stackru