# Как устроен SNMP и что Принтум получает от принтеров

## Кратко

SNMP (Simple Network Management Protocol) — протокол опроса сетевых устройств. Принтум использует SNMP для получения данных от принтеров и МФУ.

---

## Как устроена информация в принтере

Каждый принтер содержит базу данных объектов — **MIB (Management Information Base)**. Каждый объект в MIB имеет уникальный адрес — **OID (Object Identifier)**.

OID — это числовой путь, например: `1.3.6.1.2.1.43.11.1.1.9.1.1`

Структура OID иерархична — как путь в файловой системе:

```
1.3.6.1          — интернет
1.3.6.1.2        — management
1.3.6.1.2.1      — mib-2 (стандартные объекты)
1.3.6.1.2.1.43   — Printer MIB (RFC 3805)
1.3.6.1.2.1.43.11 — prtMarker (данные о расходных материалах)
```

---

## Что можно получить по OID

|Данные|OID-ветка|Примечание|
|:---|:---|:---|
|Модель устройства|`1.3.6.1.2.1.25.3.2.1.3`|hrDeviceDescr|
|Серийный номер|`1.3.6.1.2.1.43.5.1.1.17`|prtGeneralSerialNumber|
|Счётчик отпечатков|`1.3.6.1.2.1.43.10.2.1.4`|prtMarkerLifeCount|
|Оставшийся ресурс тонера|`1.3.6.1.2.1.43.11.1.1.9`|prtMarkerSuppliesLevel|
|Максимальный ресурс|`1.3.6.1.2.1.43.11.1.1.8`|prtMarkerSuppliesMaxCapacity|
|Статус устройства|`1.3.6.1.2.1.25.3.5.1.1`|hrPrinterStatus|
|IP-адрес|`1.3.6.1.2.1.4.20.1.1`|ipAdEntAddr|

---

## Версии SNMP

|Версия|Аутентификация|Когда использовать|
|:---|:---|:---|
|SNMPv1|Community string (открытый текст)|Старые устройства|
|SNMPv2c|Community string (открытый текст)|Большинство современных устройств|
|SNMPv3|Логин + пароль + шифрование|Повышенные требования к безопасности|

Принтум поддерживает SNMPv1 и SNMPv2c. Community string по умолчанию: `public`.

---

## Почему разные вендоры показывают разные данные

Стандарт Printer MIB (RFC 3805) описывает общую структуру. Но производители реализуют его по-своему:

- Одни передают оставшийся ресурс в процентах.
- Другие — в страницах.
- Третьи не передают вообще и возвращают `-1` или `0`.
- Некоторые устройства передают некорректные значения (`253`, `254`).

Принтум компенсирует это:

- Если устройство передаёт данные — использует их напрямую.
- Если не передаёт — рассчитывает самостоятельно по счётчику отпечатков.
- Расчётные значения помечаются символом *****.

---

## Как проверить SNMP вручную

Команда `snmpwalk` позволяет просмотреть все данные устройства:

```
snmpwalk -v 2c -c public <ip-адрес-принтера>
```

Получить конкретный OID:

```
snmpget -v 2c -c public <ip> 1.3.6.1.2.1.43.10.2.1.4.1.1
```

Это полезно при диагностике — если `snmpwalk` не отвечает, устройство не будет обнаружено Сетевым агентом.

---

## Связанные страницы

- [Как рассчитывается ресурс деталей](http://wiki.printum.io/books/1-arxitektura-i-koncepcii/page/kak-rasscityvaetsia-resurs-detalei)
- [Принтер не обнаружен при сетевом сканировании](http://wiki.printum.io/books/7-ustranenie-neispravnostei/page/printer-ne-obnaruzen-pri-setevom-skanirovanii)
- [Сетевой агент — справка по компоненту](http://wiki.printum.io/books/2-komponenty-sistemy/page/setevoi-agent-spravka-po-komponentu)