Initializing the Session
libnet
enables you to build arbitrary network
packets using three main concepts: contexts, protocol blocks, and
protocol tags. A
context
is an opaque handle used to maintain the session state for building
the complete packet. A context is referred to by a variable of type
libnet_t. A protocol
block
is the libnet
internal data built for each network layer you have created. You
refer to these via protocol
tags
of type libnet_ptag_t.
As when using libpcap, you should never need to
know precisely what is in either the libnet
context or the protocol blocks. When the packet is sent, the
libnet_t context is provided,
libnet creates the packet from the protocol
blocks created, and the packet is sent.
Therefore, the first thing our libnet tool
requires is a libnet context of type
libnet_t. We create a context using the
libnet_init( )
function, which has the following
prototype:
libnet_t *libnet_init (int injection_type, char *device, char *err_buf)
The example program uses this function to open its session, as shown in Example 11-1.
Example 11-1. Using libnet_init( )
#include <libnet.h>
libnet_t *l; /* libnet context */
char errbuf[LIBNET_ERRBUF_SIZE]; /* error messages */
/* open handle */
l = libnet_init (LIBNET_LINK, device, errbuf);
if (l == NULL)
{
fprintf (stderr, "Error opening context: %s", errbuf);
exit (1);
}Because the I am tool is creating ARP packets,
and because ARP is a link layer protocol, we cannot use one of the
LIBNET_RAW injection types for this ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access