Snmp

Citrix 通過 snmp 查詢不支持 snmp 的虛擬列印機

  • February 17, 2012

我需要一個關於如何使它工作的建議。

我們有一個列印伺服器,它有一些“pcl to pdf”轉換器應用程序,它監聽埠 9001,收集 PCL 作業並從 PCL 創建 PDF。問題是 pcl to pdf 應用程序不支持 SNMP。由於這一切都發生在 citrix 環境中,citrix 使用 snmp 協議來查詢列印機狀態。由於 IT 限制,我們無法在 citrix 中禁用 SNMP。由於所有使用者都將列印機報告為離線並且無法使用。

當我們將數據包擷取放在我們的機器上時,我們會看到一些列印機陷阱/oid:

1.3.6.1.2.1.25.3.2.1.5.1

1.3.6.1.2.1.25.3.5.1.1.1

1.3.6.1.2.1.25.3.5.1.2.1

如果我們能以某種方式模擬列印機對上述 OID 的 snmp 查詢的響應,這將解決我們的問題。

有什麼建議麼?

我設法為我的問題找到了解決方案。

我下載了包含 SNMPD 項目(SNMP 代理)的#SNMP(基於 C# 的開源 SNMP),然後我編寫了幾個類來處理我必須響應的 OID。

基於:http ://www.oid-info.com/get/1.3.6.1.2.1.25.3.2.1.5

public class hrDeviceStatus : ScalarObject
{
   private readonly Integer32 _value = new Integer32(2); // running 2

   public hrDeviceStatus()
       : base(new ObjectIdentifier("1.3.6.1.2.1.25.3.2.1.5.1"))
   {
   }

   public override ISnmpData Data
   {
       get 
       {
           return _value; 
       }
       set {  }
   }
}

基於:http ://www.oid-info.com/get/1.3.6.1.2.1.25.3.5.1.1

public class hrPrinterStatus : ScalarObject
{
   private readonly Integer32 _value = new Integer32(1); // other

   public hrPrinterStatus()
       : base(new ObjectIdentifier("1.3.6.1.2.1.25.3.5.1.1.1"))
   {
   }

   public override ISnmpData Data
   {
       get 
           { 
               return _value; 
           }
       set { }
   }
}

基於:http ://www.oid-info.com/get/1.3.6.1.2.1.25.3.5.1.2

public class hrPrinterDetectedErrorState : ScalarObject
{
   private readonly OctetString _value = new OctetString("\0\0"); // all 16 bits set to 0 

   public hrPrinterDetectedErrorState()
       : base(new ObjectIdentifier("1.3.6.1.2.1.25.3.5.1.2.1"))
   {
   }

   public override ISnmpData Data
   {
       get 
       { 
           return _value; 
       }
       set { }
   }
}

然後我將它們添加到對象儲存中。

   var store = Container.Resolve<ObjectStore>();
   store.Add(new hrDeviceStatus());
   store.Add(new hrPrinterStatus());
   store.Add(new hrPrinterDetectedErrorState());

就這樣。感謝所有試圖提供幫助的人。

引用自:https://serverfault.com/questions/358802