Ejemplo n.º 1
0
func (h *PacketHeader) Unmarshal(r io.Reader) error {
	if err := read.Uint16(&h.Version, r); err != nil {
		return err
	}
	if err := read.Uint16(&h.Count, r); err != nil {
		return err
	}
	// The spec says at most 24 flows in one packet, but reality disagrees.
	if h.Count < 1 || h.Count > 32 {
		return fmt.Errorf("protocol error: %d flows out of bounds", h.Count)
	}
	var u uint32
	if err := read.Uint32(&u, r); err != nil {
		return err
	}
	h.SysUptime = time.Duration(u)
	var t uint64
	if err := read.Uint64(&t, r); err != nil {
		return err
	}
	h.Unix = time.Unix(int64(t>>32), int64(t&0xffffffff))
	if err := read.Uint32(&h.FlowSequence, r); err != nil {
		return err
	}
	if err := read.Uint8(&h.EngineType, r); err != nil {
		return err
	}
	if err := read.Uint8(&h.EngineID, r); err != nil {
		return err
	}
	if err := read.Uint16(&h.SamplingInterval, r); err != nil {
		return err
	}
	return nil
}
Ejemplo n.º 2
0
func (r *FlowRecord) Unmarshal(h io.Reader) error {
	r.SrcAddr = make(net.IP, 4)
	if _, err := h.Read(r.SrcAddr); err != nil { // 0-3
		return err
	}
	r.DstAddr = make(net.IP, 4)
	if _, err := h.Read(r.DstAddr); err != nil { // 4-7
		return err
	}
	r.NextHop = make(net.IP, 4)
	if _, err := h.Read(r.NextHop); err != nil { // 8-11
		return err
	}
	if err := read.Uint16(&r.Input, h); err != nil { // 12-13
		return err
	}
	if err := read.Uint16(&r.Output, h); err != nil { // 14-15
		return err
	}
	if err := read.Uint32(&r.Packets, h); err != nil { // 16-19
		return err
	}
	if err := read.Uint32(&r.Bytes, h); err != nil { // 20-23
		return err
	}
	if err := read.Uint32(&r.First, h); err != nil { // 24-27
		return err
	}
	if err := read.Uint32(&r.Last, h); err != nil { // 28-31
		return err
	}
	if err := read.Uint16(&r.SrcPort, h); err != nil { // 32-33
		return err
	}
	if err := read.Uint16(&r.DstPort, h); err != nil { // 34-35
		return err
	}
	if err := read.Uint8(&r.Pad1, h); err != nil { // 36
		return err
	}
	if err := read.Uint8(&r.TCPFlags, h); err != nil { // 37
		return err
	}
	if err := read.Uint8(&r.Protocol, h); err != nil { // 38
		return err
	}
	if err := read.Uint8(&r.ToS, h); err != nil { // 39
		return err
	}
	if err := read.Uint16(&r.SrcAS, h); err != nil { // 40-41
		return err
	}
	if err := read.Uint16(&r.DstAS, h); err != nil { // 42-43
		return err
	}
	if err := read.Uint8(&r.SrcMask, h); err != nil { // 44
		return err
	}
	if err := read.Uint8(&r.DstMask, h); err != nil { // 45
		return err
	}
	if err := read.Uint16(&r.Pad2, h); err != nil { // 46-47
		return err
	}

	return nil
}
Ejemplo n.º 3
0
func (r *FlowRecord) Unmarshal(h io.Reader) error {
	r.SrcAddr = make(net.IP, 4)
	if _, err := h.Read(r.SrcAddr); err != nil {
		return err
	}
	r.DstAddr = make(net.IP, 4)
	if _, err := h.Read(r.DstAddr); err != nil {
		return err
	}
	r.NextHop = make(net.IP, 4)
	if _, err := h.Read(r.NextHop); err != nil {
		return err
	}
	if err := read.Uint16(&r.Input, h); err != nil {
		return err
	}
	if err := read.Uint16(&r.Output, h); err != nil {
		return err
	}
	if err := read.Uint32(&r.Packets, h); err != nil {
		return err
	}
	if err := read.Uint32(&r.Bytes, h); err != nil {
		return err
	}
	if err := read.Uint32(&r.First, h); err != nil {
		return err
	}
	if err := read.Uint32(&r.Last, h); err != nil {
		return err
	}
	if err := read.Uint16(&r.SrcPort, h); err != nil {
		return err
	}
	if err := read.Uint16(&r.DstPort, h); err != nil {
		return err
	}
	if err := read.Uint16(&r.Pad1, h); err != nil {
		return err
	}
	if err := read.Uint8(&r.Protocol, h); err != nil {
		return err
	}
	if err := read.Uint8(&r.ToS, h); err != nil {
		return err
	}
	if err := read.Uint8(&r.Flags, h); err != nil {
		return err
	}
	if err := read.Uint8(&r.Pad2, h); err != nil {
		return err
	}
	if err := read.Uint16(&r.Pad3, h); err != nil {
		return err
	}
	if err := read.Uint32(&r.Reserved, h); err != nil {
		return err
	}

	return nil
}