c++ program, which generates ARP packets.
-
I downloaded and installed crafter library on my debian machine. The installation is as easy as described
in
libcrafter.
The first example, which I tried, detects the computer's
IP and MAC address.
-
In this case, I used a written example, which creates ARP packets.
/* Simple ARP Ping on local network
*
* The program assembles a set of ARP requests on a container of packets ...
*/
But instead of sending them through my home network. I print each packet content
using crafter print method. The Print function gives a lot of information while the
RawString function has an annoying display. So I modified the latter:
/* Print Payload */
void Packet::RawString(ostream& str) {
Craft();
/* Print raw data in hexadecimal format */
for(size_t i = 0 ; i < bytes_size ; i++) {
//str << "\\x";
if(i > 0 && (i%16) == 0) cout << endl;
else if(i > 0) cout << " ";
str << std::hex << setfill('0') << setw(2) << (unsigned int)(raw_data)[i];
}
str << endl;
}
A print example of one packet is shown below:
< Ethernet (14 bytes) :: DestinationMAC = ff:ff:ff:ff:ff:ff , SourceMAC = 00:0c:29:b4:41:b0 , Type = 0x800 , >
< ARP (28 bytes) :: HardwareType = 0x1 , ProtocolType = 0x800 , HardwareLength = 6 , ProtocolLength = 4 , Operation = 1 , SenderMAC = 00:0c:29:b4:41:b0 , SenderIP = 192.168.0.180 , TargetMAC = 00:00:00:00:00:00 , TargetIP = 192.168.0.255 , >
ff ff ff ff ff ff 00 0c 29 b4 41 b0 08 06 00 01
08 00 06 04 00 01 00 0c 29 b4 41 b0 c0 a8 00 b4
00 00 00 00 00 00 c0 a8 00 ff
-
The code is based on the example ARPping.cpp. The send packets code has been removed. Instead the
print functions are used.
/* Finally, push the packet into the container */
request_packets.push_back(packet);
(*packet).Print();
(*packet).RawString();
|