Мне нужно предложение, как заставить это работать.
У нас есть сервер печати, на котором есть приложение-конвертер «pcl в pdf», которое прослушивает порт 9001, собирает задания PCL и создает PDF-файлы из PCL. Проблема в том, что приложение pcl to pdf не поддерживает SNMP. Поскольку все это происходит в среде Citrix, Citrix использует протокол snmp для запроса состояния принтера. Мы не можем отключить SNMP в Citrix из-за ограничения ИТ. Из-за всего этого принтер сообщается как отключенный для всех пользователей, и его нельзя использовать.
Когда мы помещаем захват пакетов на нашу машину, мы видим некоторые ловушки / ошибки принтера:
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
Если бы мы могли каким-то образом имитировать ответы принтера на запросы snmp по указанным выше идентификаторам OID, это решило бы нашу проблему.
Какие-либо предложения?
Мне удалось найти решение своей проблемы.
Я загрузил #SNMP (SNMP на основе C # с открытым исходным кодом) который содержит проект SNMPD (агент 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());
Вот и все. Спасибо всем, кто пытался помочь.