2015-04-25 5 views
1

Мне нужно получить информацию через snmp, а затем использовать эту информацию для создания своего рода графического приложения в Unity.Конфигурация агента SNMP windows/linux

я найти библиотеку SnmpSharp http://www.snmpsharpnet.com/

создать небольшую программу, в единстве, используя эту библиотеку, а затем я установил на моем SNMP окна машины (с помощью окна официального гида), на локальном хосте это работает!

Теперь моя проблема Как я могу подключиться к другому агенту в своей локальной сети? Как установить агент на другом устройстве, например, на компьютер linux? Я немного запутался, я пытаюсь установить snmp на другой компьютер Windows, но я не могу получить информацию snmp от него; я пытаюсь установить SNMP-агент на Linux PC, но я не понимаю, как правильно установить агент, располагающий к общению через мой лан

Это код, который работает на локальном хосте

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 вкладку

enter image description here

Отключить удаленный хост (ы), разрешенный для запроса вашего агента SNMP.


Edit:

Я знаю, что это может просто ответить на часть вашего вопроса: Не может запросить Windows, агент SNMP из других хостов локального хоста.

Как установить/сконфигурировать SNMP-агент в Linux будет полным другим вопросом, описывающим, что вы пытались и что не работает.

C# обзор кода/отладка shoud будет размещена на сайте сестра SF: stackoverflow

Смежные вопросы