我是SNMP协议的新手。我想知道snmpd
如何处理SNMP请求。例如:
snmpget -v1 -c public localhost sysName
我的理解是它正在实施MIB,例如SNMPv2-MIB,但正在执行uname -n
命令?
答案 0 :(得分:0)
对于sysname OID的net-snmp snmpd映射,请参阅system_mib.c,其中有时确实基于uname
,请参阅下面的代码段:
#ifdef HAVE_GETHOSTNAME
gethostname(sysName, sizeof(sysName));
#else
#ifdef HAVE_UNAME
strlcpy(sysName, utsName.nodename, sizeof(sysName));
#else
#if defined (HAVE_EXECV) && !defined (mingw32)
sprintf(extmp.command, "%s -n", UNAMEPROG);
/*
* setup defaults
*/
extmp.type = EXECPROC;
extmp.next = NULL;
exec_command(&extmp);
strlcpy(sysName, extmp.output, sizeof(sysName));
if (strlen(sysName) >= 1)
sysName[strlen(sysName) - 1] = 0; /* chomp new line */
#else
strcpy(sysName, "unknown");
#endif /* HAVE_EXECV */
#endif /* HAVE_UNAME */
#endif /* HAVE_GETHOSTNAME */
要了解snmpd
内部工作原理,请查看net-snmp网站上的agent architecture页面。
它是详细的,并解释了如何使用新的MIB扩展net-snmp。