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

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

3
abiko 15 Авг 2010 в 01:34

3 ответа

Лучший ответ

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

  "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)

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

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

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).

3
Doon 16 Авг 2010 в 17:45

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

0
bstpierre 15 Авг 2010 в 02:52

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

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

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

0
Andomar 14 Авг 2010 в 23:22