Listing 4 arp method
public byte[] arp(InetAddress ip, InetAddress srcip, \
int networkInterfaceID) throws java.io.IOAcception{
/* Verify that we obtained a valid networkInterfaceID */
if (networkInterfaceID < 0 || devices.length <= networkInterfaceID)
return null;
/* Set device to the network interface specified by the
networkInterfaceID */
NetworkInterface device=devices[networkInterfaceID];
/* Lets obtain our MAC address and put it in an array of bytes called
myMac */
byte[] myMac = myMacAddress(networkInterfaceID);
/* Initialize our network device and open it for sending/receiving */
JpcapCaptor captor=JpcapCaptor.openDevice(device,2000,false,3000);
captor.setFilter("arp",true);
/* initiate our sender instance of the network device */
JpcapSender sender=captor.getJpcapSenderInstance();
/* We will use ff:ff:ff:ff:ff:ff as our broadcast address so everyone
on our network will receive the ARP request */
byte[] broadcast=new \
byte[]{(byte)255,(byte)255,(byte)255,(byte)255,(byte)255,(byte)255};
/* Initiate an ARPPacket called arp and build the packet */
ARPPacket arp=new ARPPacket();
arp.hardtype=ARPPacket.HARDTYPE_ETHER; //set hardware type to Ethernet
arp.prototype=ARPPacket.PROTOTYPE_IP; // set the protocol type to IP
arp.operation=ARPPacket.ARP_REQUEST; // define the operation to be an
// ARP request
arp.hlen=6; // Hardware address length
arp.plen=4; // protocol address length
arp.sender_hardaddr=myMac; // Set the MAC address of the
// sender to our MAC add
arp.sender_protoaddr=srcip.getAddress(); // Set the IP address of the
// sender to our IP add
arp.target_hardaddr=broadcast; // Set the MAC address of the
// remote to the broadcast add
arp.target_protoaddr=ip.getAddress(); // Set the IP address of the
// remote to the remote IP add
/* Initiate the EthernetPacke ether that will transport the ARP request
and start to build the packet */
EthernetPacket ether=new EthernetPacket();
ether.frametype=EthernetPacket.ETHERTYPE_ARP; // set the Ethernet Frame
// type to a ARP request
ether.src_mac=myMac; // Set the source MAC address to our MAC address
ether.dst_mac=broadcast; // Set the destination MAC address to the
// broadcast ADD
arp.datalink=ether; // Set the Data Link Layer of the arp packet
// to the Ethernet packet
/* send out the ARP request */
sender.sendPacket(arp);
/* Captor the information coming back to our computer, and see if an
ARP response was sent back if not throw an Acception */
while(true){
ARPPacket p=(ARPPacket)captor.getPacket();
// captor any packet that fits the filter
if(p==null) // if the filter timesout send an acception back
{
throw new IllegalArgumentException(ip+" did not responed to \
ARP request");
}
/* If the address of the captured packet equals the remote ip
address return the senders MAC address */
if(Arrays.equals(p.target_protoaddr,srcip.getAddress()))
{
return p.sender_hardaddr;
}
}
}
|