snmpd如何处理SNMP请求?

时间:2014-10-08 18:58:09

标签: net-snmp snmpd

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

snmpget -v1 -c public localhost sysName

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

1 个答案:

答案 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。