读取win10中snmp信息:

一、win10配置snmp协议

  1. 添加snmp服务,路径: 控制面板/应用和功能 中选择可选功能
选择可选功能
可选功能中添加功能

选择 简单网络管理协议(SNMP) 并添加

选择并添加添加snmp

2. 配置snmp信息

检查snmp服务是否正常启动
添加snmp社区


二、编写Golang代码

  1. 定义IP、端口、和社区。注意社区要和上图设置保持一致
const TgtIP = "localhost"  // 目标IP
const TgtProt = 161        // 目标端口
const TgtCommunity = "pub" // 社区,和winodws中保持一致

2. 新建function, 用来创建GoSNMP结构体,win10默认SNMPV2c版本

func newSnmp() *g.GoSNMP {
	return &g.GoSNMP{
		Target:             TgtIP,
		Port:               TgtProt,
		Transport:          "udp",
		Community:          TgtCommunity,
		Version:            g.Version2c,
		Timeout:            time.Duration(2) * time.Second,
		Retries:            3,
		ExponentialTimeout: true,
		MaxOids:            g.MaxOids,
	}
}

3. 构建main函数,缺少fn

func main() {
	//snmp连接
	g.Default = newSnmp()
	err := g.Default.Connect()
	if err != nil {
		fmt.Printf("Connect() err: %v", err)
	}
	defer g.Default.Conn.Close()

	//snmp walk
	var oid string = ".1.3.6.1.2.1.2.2.1.2"
	err = g.Default.Walk(oid, fn)
	if err != nil {
		fmt.Printf("Walk() err: %v", err)
	}
}

4. 补充打印处理函数fn

func fn(v g.SnmpPDU) error {
	fmt.Printf("oid: %s, value: ", v.Name)
	switch v.Type {
	case g.OctetString:
		fmt.Printf("%s\n", string(v.Value.([]byte)))
	default:
		fmt.Printf("%d\n", g.ToBigInt(v.Value))
	}
	return nil
}

三、输出结果示例:

oid: .1.3.6.1.2.1.2.2.1.2.1, value: Software Loopback Interface 1
oid: .1.3.6.1.2.1.2.2.1.2.2, value: Microsoft 6to4 Adapter
oid: .1.3.6.1.2.1.2.2.1.2.3, value: WAN Miniport (L2TP)
oid: .1.3.6.1.2.1.2.2.1.2.4, value: Microsoft IP-HTTPS Platform Adapter
oid: .1.3.6.1.2.1.2.2.1.2.5, value: Microsoft Kernel Debug Network Adapter
oid: .1.3.6.1.2.1.2.2.1.2.6, value: Realtek USB FE Family Controller
...