Constructing a Ping packet with libnet
In this recipe, we will construct an ICMP (Ping) packet and inject it into the network. The device that receives the packet should respond back with an ICMP response packet. However, libnet is a packet construction and an injection library, not a packet capture library, so we will use Wireshark (http://www.wireshark.org) to see the packets that we send out and the packet that is returned. In Chapter 4, Using Libpcap, we will see how to capture packets.
In order to create an ICMP packet and inject it into the network, we will need to create an ICMP header and an IP header. The IP header and the corresponding libnet_build_ipv4()
function were covered in the Introduction section of this chapter, so we will not cover that in detail here. We will cover the ICMP header and the libnet_build_icmpv4_echo()
function in depth. There are a number of different ICMP types; in this recipe, we will be covering the Echo (request). The following diagram shows what the...