April 2005
Intermediate to advanced
344 pages
11h 59m
English
Once
we have
created a libnet context, we can start building
the protocol blocks to be sent. Remember that we must create the
protocol blocks in order, from the highest-level protocol to the
lowest-level protocol we are required to build. Because we are using
the LIBNET_LINK injection type, we are required to
create the link layer packet as well as any higher-level packets.
Therefore, we need to start by creating the ARP packet header, as
shown in Example 11-2.
Example 11-2. Creating the ARP header
in_addr_t ipaddr; /* source ip address */
in_addr_t destaddr; /* destination ip address */
u_int8_t *macaddr; /* destination mac address */
struct libnet_ether_addr *hwaddr; /* source MAC address */
libnet_ptag_t arp = 0; /* ARP protocol tag */
/* get the hardware address for the card we are using */
hwaddr = libnet_get_hwaddr (l);
/* build the ARP header */
arp = libnet_autobuild_arp (ARPOP_REPLY, /* operation */
(u_int8_t *) hwaddr, /* source hardware addr */
(u_int8_t *) &ipaddr, /* source protocol addr */
macaddr, /* target hardware addr */
(u_int8_t *) &destaddr, /* target protocol addr */
l); /* libnet context */
if (arp == -1)
{
fprintf (stderr,
"Unable to build ARP header: %s\n", libnet_geterror (l));
exit (1);
}
Example 11-2 uses the libnet_autobuild_arp()
function, which has the following
prototype:
libnet_ptag_t libnet_autobuild_arp (u_int16_t op, u_int8_t *sha, u_int8_t *spa,
u_int8_t *tha, u_int8_t *tpa, libnet_t *l)The build and autobuild functions ...
Read now
Unlock full access