go-nmsg
is a pure go implementation of the NMSG container and payload
format used by the C nmsg toolkit
and library.
import "github.com/farsightsec/go-nmsg"
import "github.com/farsightsec/go-nmsg/nmsg_base"
var r io.Reader
var w io.Writer
...
input := nmsg.NewInput(r, mtu)
output := nmsg.BufferedOutput(w)
output.SetMaxSize(nmsg.MaxContainerSize, 0)
for {
payload, err := input.Recv()
if err != nil {
if nmsg.IsDataError(err) {
continue
}
break
}
message := payload.Message()
switch message.(type) {
case *nmsg_base.Dnstap:
// process dnstap
// write copy to output
output.Send(payload)
}
}
output.Close()
go-nmsg
requires the following open source libraries:
"google.golang.org/protobuf/proto"
"github.com/dnstap/golang-dnstap"
go-nmsg
can pack and unpack the protobuf structure of an NMSG payload,
and the protobuf structure of the data contained in the payload. It does
not implement the full functionality of the C libnmsg message
modules, such as:
- Advanced field types (e.g., a protobuf []byte as an IP address)
- Generated fields
- Formatting of fields for presentation and JSON output
Applications needing such functionality in go should use the
cgo-nmsg
package included in this distribution under:
"github.com/farsightsec/go-nmsg/cgo-nmsg"