Проверить порты с помощью SNMP (net-snmp)

Есть ли способ контролировать порты сервера с помощью SNMP (я использую net-snmp-python, чтобы проверить это с помощью python). До сих пор я проверял довольно просто с помощью команды «nc», однако я хочу посмотреть, смогу ли я сделать это с помощью SNMP.

Спасибо за ваши ответы и терпение.


person abiko    schedule 14.08.2010    source источник
comment
что именно вы хотите мониторить? Какие порты прослушиваются, принимают ли они соединение?   -  person Doon    schedule 15.08.2010
comment
Я хочу проверить стандартные порты, такие как FTP, SSH, HTTP(S), BIND, MySQL   -  person abiko    schedule 15.08.2010
comment
Вы можете попробовать ответить на этот вопрос при сбое сервера - могут быть готовые решения, которые лучше соответствуют вашим потребностям.   -  person bstpierre    schedule 15.08.2010


Ответы (3)


Что ж, если вы хотите использовать SNMP, чтобы точно увидеть, какие порты прослушиваются, вы должны иметь возможность использовать следующие OID и ходить по таблице.

  "1.3.6.1.2.1.6.13.1.1" tcpConnState 
  "1.3.6.1.2.1.7.5.1.1"  udpLocalAddress

Прогулка по UDP даст вам что-то вроде этого:

snmpwalk -cpublic 192.168.1.13 1.3.6.1.2.1.7.5.1.1                                                    
   UDP-MIB::udpLocalAddress.0.0.0.0.68 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.161 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.32908 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.33281 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.33795 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.34822 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.44782 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.192.168.1.13.9950 = IpAddress: 192.168.1.13

и TCP как:

snmpwalk -cpublic 192.168.1.13 1.3.6.1.2.1.6.13.1.1                                                   
   TCP-MIB::tcpConnState.0.0.0.0.21.0.0.0.0.0 = INTEGER: listen(2)
   TCP-MIB::tcpConnState.0.0.0.0.23.0.0.0.0.0 = INTEGER: listen(2)
   TCP-MIB::tcpConnState.0.0.0.0.80.0.0.0.0.0 = INTEGER: listen(2)

Просмотр таблиц покажет вам, какие порты прослушиваются, и может предоставить вам некоторую информацию.

Теперь, если вы просто хотите проверить, прослушиваются ли определенные порты, которые вы указали в своем вопросе, вы можете использовать следующие OID для проверки.

ftp -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.21.0.0.0.0.0
ssh -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.22.0.0.0.0.0
http --  1.3.6.1.2.1.6.13.1.1.0.0.0.0.80.0.0.0.0.0
https -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.443.0.0.0.0.0
bind -- 1.3.6.1.2.1.7.5.1.1.0.0.0.0.53 

вышеупомянутые OIDS предполагают, что сервер привязан к адресу по умолчанию (0.0.0.0). Но они могут быть привязаны только к IP-адресу сервера (зависит от конфигурации). В этом случае, если ваш IP-адрес сервера равен 192.168.10.1, вы получите

1.3.6.1.2.1.7.5.1.1.192.168.10.1.53  for bind

Итак, все сказанное, я думаю, если бы вы хотели узнать, прослушивал ли http адрес по умолчанию на хосте 192.168.10.1, используя привязки python net snmp, у вас было бы что-то вроде этого.

import netsnmp
oid = netsmp.Varbind('1.3.6.1.2.1.6.13.1.1.0.0.0.0.80.0.0.0.0.0')
result = netsnmp.snmp(oid,
                      Version = 2,
                      DestHost="192.168.10.1",
                      Community="public")

Я не уверен на 100%, требуется ли Varbind, поскольку я не использую snmp в python, и в некоторых найденных мной примерах он был, а в некоторых - нет. Но попробуй так или иначе. в приведенном выше запросе, если сервер не прослушивает, он не вернет такой OID, если он открыт и результат прослушивания должен быть Integer (2).

person Doon    schedule 16.08.2010

Трудно понять, где может вписаться SNMP.

Лучшим способом мониторинга было бы использование клиента, специфичного для протокола (например, запуск простого запроса по сравнению с MySQL, получение тестового файла с использованием FTP и т. д.).

Если это не сработает, вы можете открыть сокет TCP или UDP для портов и посмотреть, не прослушивает ли кто-нибудь.

person Andomar    schedule 14.08.2010

Вы можете попробовать запустить nmap для портов, которые хотите проверить, но это не обязательно даст вам указание на то, что серверный процесс на другой стороне открытого порта активен.

person bstpierre    schedule 15.08.2010