2011-05-11 10 views
0

SNMP를 사용하여 프린터에서 데이터를 가져 오려고합니다. 프린터를 껐다가 켜면 OID가 get이됩니다. .1.3.6.1.2.1.43.18.1.1.8.1.1입니다. 일시 중지, 용지 부족 또는 용지 걸림 등 프린터에 "이벤트"가 발생할 때마다 원하는 데이터의 OID가 증가합니다.증가하는 SNMP OID 처리?

예를 들어, 프린터를 켜고 .1.3.6.1.2.1.43.18.1.1.8.1.1.을 쿼리하면 값으로 "일시 중지"됩니다. 프린터를 일시 중지하고 프린터에서 모든 용지를 꺼내고 .1.3.6.1.2.1.43.18.1.1.8.1.2을 쿼리해야하는 "용지 추가"메시지가 표시됩니다.

정상적인 SNMP 동작인지 잘 모르겠지만 프린터 상태를 프로그래밍 방식으로 얻을 수 있도록 사람들이 내가 제안한 내용이 궁금합니다.

답변

3

네, 그것은 당신이 경고 테이블에서 행을 불러 오는하는 정상 : (from RFC 1759를)

enter image description here

은 MIB의 해당 텍스트 부분은 다음과 같습니다 :

는 그냥 MIB에 대한 봐

prtAlertTable OBJECT-TYPE 
    SYNTAX  SEQUENCE OF PrtAlertEntry 
    MAX-ACCESS not-accessible 
    STATUS  current 
    DESCRIPTION 
     "" 
    ::= { prtAlert 1 } 

prtAlertEntry OBJECT-TYPE 
    SYNTAX  PrtAlertEntry 
    MAX-ACCESS not-accessible 
    STATUS  current 
    DESCRIPTION 
     "Entries may exist in the table for each device 
     index who's device type is `printer'." 
    INDEX { hrDeviceIndex, prtAlertIndex } 
    ::= { prtAlertTable 1 } 

PrtAlertEntry ::= SEQUENCE { 
    prtAlertIndex    Integer32, 
    prtAlertSeverityLevel  INTEGER, 
    prtAlertTrainingLevel  INTEGER, 
    prtAlertGroup    INTEGER, 
    prtAlertGroupIndex   Integer32, 
    prtAlertLocation   Integer32, 
    prtAlertCode    INTEGER, 
    prtAlertDescription   OCTET STRING, 
    prtAlertTime    TimeTicks 
} 

그래서 SNMP가 작동하는 방식은 행의 색인에 의해 MIB의 OID 항목의 접미사를 붙이는 것입니다. Get-Bulk를 사용하여 테이블 전체를 얻을 수 있지만, 가장 먼저해야 할 일은 SNMP 테이블을 찾는 방법을 이해하는 것입니다. 정확한 경우

는 :

1.3.6.1.2.1.43.18.1.1.8 : 1.3.6.1.2.1.43.18.1.1.8.1.1 당신은 그것을 읽을 필요 prtAlertDescription이

1 다음 :

1 다음에 hrDeviceIndex : 행입니다 prtAlertIndex합니다.

어드밴스 (조언) snmpsharpnet이라는 어셈블리는 .NET 상단에서 SNMP로 재생하는 데 매우 유용합니다.

+0

저는 실제로 snmpsharp를 이미 사용하고 있습니다. 프린터는 SNMP v1 만 지원합니다. 그렇다면 GetBulk를 수행 할 수 없습니까? – omatase

+0

예 Get-Bulk는 SNMPV2c에서만 사용할 수 있습니다. 그래서 첫 번째 콜론 – JPBlanc

+0

에서 걸어서 (get-next)를 프로그래밍해야합니다. 그걸 생각하면 뭔가를 치기 전까지 값을 늘리십시오. 내가 어디서 시작했는지는 알지만 적어도 더 나은 옵션은 없다는 것을 알고 있습니다. – omatase

1

프린터에 상태 목록이 저장되어있는 것 같습니다. OID .1.3.6.1.2.1.43.18.1.1.8.1.1부터 대량을 가져와 그룹의 마지막 변수 바인딩을 사용해야합니다.

+0

OID의 마지막 숫자를 증가시키면서 Get을 반복적으로 수행하는 것과 같습니다. 나는 벌크하기 전에 들어 본 적이 없지만 그것을 들여다 보니 마치 두포에서하는 것처럼 들린다. make에 대한 최대 암시 적 GetNext 호출을 나타내는 숫자를 제공하고 값을 찾을 때까지 또는 지정된 최대 숫자에 도달 할 때까지이를 수행합니다. – omatase

+0

SNMP v2를 사용하는 경우 벌크 PDU를 사용하면 한 번의 작업으로 여러 값을 테이블에서 가져올 수 있습니다. 테이블이 하나의 데이터 그램에 비해 너무 큰 경우 여러 개의 대량 요청을 보내야 할 수 있습니다. – Olaf