Snmp
Citrix 通過 snmp 查詢不支持 snmp 的虛擬列印機
我需要一個關於如何使它工作的建議。
我們有一個列印伺服器,它有一些“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());
就這樣。感謝所有試圖提供幫助的人。