Я пытаюсь интегрировать запросы SNMP в приложение Flask, используя версию PYSNMP 7.1.16. Несмотря на правильное использование .Create () при инициализации объекта UDPTransportTarget, я все еще сталкиваюсь с ошибкой: «Пожалуйста, вызовите .Create (), чтобы построить объект udpTransportTarget». Я пробовал разные подходы, включая корректировку аргументов, но проблема сохраняется. Ошибка, по -видимому, связана с тем, как создается или инициализируется транспортная цель. , render_template
from pysnmp.hlapi.asyncio import *
import logging
import asyncio < /p>
logging.basicConfig(level=logging.DEBUG)
app = Flask(__name__)
# Liste des IPs des imprimantes
ips = [
"10.140.212.100", "10.140.212.102", "10.140.212.103",
"10.140.212.106", "10.140.212.107", "10.140.212.108",
"10.140.212.110", "10.140.212.111", "10.140.212.112", "10.140.212.114"
]
# Fonction SNMP asynchrone
async def get_snmp_data(ip, oid, community='public'):
try:
logging.debug(f"Interrogation SNMP sur {ip} avec OID {oid}")
# Création de l'itérateur SNMP avec l'API asyncio
iterator = get_cmd(
SnmpEngine(),
CommunityData(community),
UdpTransportTarget((ip, 161)).create(),
ContextData(),
ObjectType(ObjectIdentity(oid))
)
# Attendre et récupérer les résultats
errorIndication, errorStatus, errorIndex, varBinds = await asyncio.wait_for(iterator.__anext__(), timeout=10)
if errorIndication:
return f"Erreur SNMP : {errorIndication}"
if errorStatus:
return f"Erreur SNMP : {errorStatus.prettyPrint()}"
return varBinds[0].prettyPrint()
except Exception as e:
return f"Une erreur est survenue : {str(e)}"
# Route d'accueil
@app.route('/')
def index():
return render_template("impht.html", ips=ips)
# Route pour exécuter le script SNMP
@app.route('/execute/', methods=['POST'])
async def execute_script(ip):
oids = {
'nom': '.1.3.6.1.2.1.1.5.0', # OID pour le nom
'description': '.1.3.6.1.2.1.1.1.0', # OID pour la description
}
# Lancer les appels SNMP de manière asynchrone
results = {}
for key, oid in oids.items():
results[key] = await get_snmp_data(ip, oid)
result_html = "
".join([f"{key}: {value}" for key, value in results.items()])
return f"Informations pour l'imprimante {ip} :
{result_html}"
if __name__ == "__main__":
app.run(debug=True)`
< /code>
Вот мой код html: < /p>
`
Info des Imprimantes
{% for ip in ips %}
Info de l'imprimante {{ ip }}
Exécuter
{% endfor %}
`
< /code>
Я попытался использовать метод .create () с объектом udptransporttarget, но он все еще не работал, как и ожидалось. Я ожидал, что запрос SNMP выполнит правильно и вернет нужную информацию из принтера, но вместо этого я получил сообщение об ошибке, в котором говорится: «Пожалуйста, позвоните .Create () для создания объекта udptransportTarget» даже после вызова .create ().
Подробнее здесь: https://stackoverflow.com/questions/794 ... sion-7-1-1
Проблема с интеграцией SNMP в приложение Flask с версией PYSNMP 7.1.16: «Пожалуйста, позвоните .Create (), чтобы построи ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение