
This article is the first in a multi-part blog series intended to introduce andacquaint the user with Farsight Security’s NMSG suite. This article is anintroduction to NMSG and covers version
0.9.1
.
As you may already know, Farsight Security’s Security Information Exchange (SIE) transits a great deal of variably typed data. As a result, we needed specialized software that would enable us,our customers, and our partners to painlessly serialize and transmit this everchanging data. That specialized software is NMSG.
Going forward, note that NMSG (all caps) refers to the protocol while nmsg(lowercase) refers to the C implementation of the protocol.
Back before Farsight Security acquired security assets fromISC, SIE was just coming online and in an embryonic stage.It was at this time, that NMSG’s direct antecedent, NCAP (Network Capture) wasconceived and developed. As SIE initially only streamed Passive DNS data, NCAPwas designed to provide encapsulation services for DNS payload data.Unfortunately, NCAP was not extensible and as SIE grew in size and scope, a newplatform was required. From this, NMSG was developed.
NMSG was designed as a single platform to accommodate (then ISC’s, and now)Farsight’s requirement to consume, emit, and process real-time flows of manydisparate types of structured data. Taking into account the lessons learnedfrom NCAP, NMSG is modular in design allowing for future expansion.
NMSG is an extensible container wire and file format for storing andtransmitting blobs of data with support for dynamic message types, compression,fragmentation, sequencing, and rate limiting.
Breaking all of that down:
NMSG is delivered to the application programmer as a C library called
libnmsg
. The library presents a rich API for the programmer to buildNMSG-capable applications and configure, tune, and/or tweak its many optionsand features.
The reference implementation of
libnmsg
is
nmsgtool
. It is a thin wrapperaround
libnmsg
that provides powerful NMSG functionality at the Unixcommand-line.
The nmsg package that contains both
libnmsg
and
nmsgtool
is freelyavailable for download:
Also available is a Python extension module,
pynmsg
, that enables NMSGdevelopment using the Python programming language:
The next article in the NMSG series will discuss
nmsgtool
and provide someuseful recipes and examples. Future articles will examine low-level NMSGimplementation details such as header composition, data encoding and introducethe programming APIs.
Mike Schiffman is a Protocol Legerdemainist for Farsight Security, Inc.
Read the next part in this series: Farsight’s Network Message, Volume 2: Introduction to nmsgtool