pysnmp отправить запрос не работает

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

from pysnmp.hlapi import *
g = getCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('demo.snmplabs.com', 161)),
ContextData(),
ObjectType(ObjectIdentity('TCP-MIB', 'tcpConnectionState',
                         'ipv4', '127.0.0.1', 41511,
                         'ipv4', '127.0.0.1', 993)
)
)
g.send([ObjectType(ObjectIdentity('IF-MIB', 'ifInOctets'))])

Однако я получаю эту ошибку:

TypeError: невозможно отправить значение, отличное от None, только что запущенному генератору


person user4237435    schedule 16.03.2017    source источник


Ответы (1)


То, что вы пытаетесь сделать, это отправить значение генератору Python, а не вашему одноранговому агенту SNMP. Просто используйте вместо этого next() (или поместите этот генератор в цикл), чтобы он отправил пакет SNMP в сеть на первой итерации. Вот пример .

person Ilya Etingof    schedule 16.03.2017
comment
Спасибо за ответ. Теперь я не понимаю, как я могу указать тип информации, которую я хочу. Например, информация таблицы arp - person user4237435; 21.03.2017
comment
В общем, это зависит от типа SNMP-устройства, с которым вы разговариваете. Вы можете попробовать запустить BRIDGE-MIB::dot1dTpFdbTable (это 1.3.6.1.2.1.17.4.3). - person Ilya Etingof; 24.03.2017
comment
Спасибо еще раз. Это сработало. Знаете ли вы какую-либо хорошую документацию для этого. Я получаю mac-адреса, но не могу распознать IP-адреса. Предполагается, что они должны быть включены в ответ OID, но выглядят совершенно иначе, теперь они выглядят как 1.3.6.1.2.1.17.4.3.x.xxx.x.xxx.xxx.xxx.xxx.xxx.xx. Есть ли способ получить ip-адреса? - person user4237435; 28.03.2017
comment
@user4237435 user4237435 довольно необычно, что вам нужно извлекать значения (например, IP-адреса) из OID, а не запрашивать нужный OID для нужного вам значения. Вы уверены, что ваша MIB не предлагает объект MIB, позволяющий выполнять GET OID -> IP? Если нет, вы указываете, что OID вашего ответа содержит IP-адрес, который вам нужен — не могли бы вы взять его оттуда? - person Ilya Etingof; 28.03.2017
comment
@IIya Etingof Основная идея состоит в том, чтобы получить соответствие между IP-адресом и MAC-адресом. Это обычно таблица arp показывает соответствие ip и mac. То, что я получил в качестве ответа snmp, было чем-то, чего я не ожидал. Для IP-адреса, такого как 192.168.1.1, с Mac, например 0xVNXXYYDDZZLL, я получаю что-то вроде SNMPv2-SMI::mib-2.1.17.4.3.x.xxx.x.xxx.xxx.xxx.xxx.xxx.xx = 0xVNXXYYDDZZLL с нет значения из ожидаемого 192.168.1.1 - person user4237435; 29.03.2017
comment
@IIya Etingof Я только что узнал, что значение x.xxx.x.xxx.xxx.xxx.xxx.xxx.xx не является IP-адресом. То есть mac-адрес десятичный. Это означает, что OID на самом деле не дает IP-адрес для соответствующего MAC-адреса. - person user4237435; 29.03.2017
comment
@user4237435 user4237435 Теперь я думаю, что вы, возможно, столкнулись с этой проблемой. Если вам все еще нужно решить эту проблему, я предлагаю вам указать более подробную информацию в этой проблеме pysnmp (или открыть новую). Репродуктор был бы особенно полезен! - person Ilya Etingof; 13.04.2017