Exemple #1
0
func GetValue(oid asn1.ObjectIdentifier, community string, addr net.UDPAddr) (interface{}, error) {
	conn, err := net.DialUDP("udp", nil, &addr)
	if err != nil {
		return nil, err
	}
	defer conn.Close()

	r := PDU{
		RequestId:   199,
		ErrorStatus: 0,
		ErrorIndex:  0,
		VarBindList: []VarBind{
			VarBind{
				Name:  oid,
				Value: Null(),
			},
		},
	}

	data, err := asn1.Marshal(r)
	if err != nil {
		return nil, err
	}

	m := Message{
		Version:   1,
		Community: NewOctetString(community),
		Data:      Any(data),
	}

	data, err = asn1.Marshal(m)
	if err != nil {
		return nil, err
	}

	_, err = conn.Write(data)
	if err != nil {
		return nil, err
	}

	data = make([]byte, 1500)
	read, err := conn.Read(data)
	if err != nil {
		return nil, err
	}

	pdu, err := decode(data[:read])
	if err != nil {
		return nil, err
	}
	switch response := pdu.(type) {
	case *PDU:
		return parseVarValue(response.VarBindList[0].Value)
	}
	return nil, nil
}
Exemple #2
0
func TestSNMPGetNextRequest(t *testing.T) {
	r := PDU{
		RequestId:   199,
		ErrorStatus: 0,
		ErrorIndex:  0,
		VarBindList: []VarBind{
			VarBind{
				Name:  []int{1, 3, 6, 1, 2, 1, 1, 1, 0},
				Value: Null(),
			},
		},
	}

	data, err := asn1.Marshal(r)
	if err != nil {
		t.Error(err)
	}

	m := Message{
		Version:   1,
		Community: NewOctetString("timer"),
		Data:      Any(data),
	}

	data, err = asn1.Marshal(m)
	if err != nil {
		t.Error(err)
	}

	addr := net.UDPAddr{net.IPv4(192, 168, 1, 254), 161}
	conn, err := net.DialUDP("udp4", nil, &addr)
	if err != nil {
		t.Error(err)
	}
	defer conn.Close()

	written, err := conn.Write(data)
	if err != nil {
		t.Error(err)
	}

	if written != len(data) {
		t.Errorf("did not write the full data %d", written)
	}

}