-1

我是 SNMP 协议的新手。我想知道如何snmpd处理 SNMP 请求。例如:

snmpget -v1 -c public localhost sysName

我的理解是它正在实现 MIB,例如 SNMPv2-MIB,但正在执行uname -n命令?

4

1 回答 1

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 站点上的代理架构页面。它很详细,还解释了如何使用新的 MIB 扩展 net-snmp。

于 2014-10-09T23:17:34.643 回答