Listing 5 ACKheartBeat method
public boolean ACKheartBeat(int networkInterfaceID, \ String ipaddress, int srcPort, int dstPort) { /* set our return value to false */ boolean booleanret = false; /* Lets obtain our MAC address and put it in an array of bytes called myMac */ byte[] myMac = myMacAddress(networkInterfaceID); /* Lets obtain our IP address and put it in an array of bytes called myIPAdd */ byte[] myIPAdd = myIPAddress(networkInterfaceID); /* Set device to the network interface specified by the networkInterfaceID */ NetworkInterface device = devices[networkInterfaceID]; try { /* Initialize our network device and open it for sending/receiving */ JpcapCaptor captor=JpcapCaptor.openDevice \ (device,2000,false,5000); String filter = "tcp dst port " + srcPort; captor.setFilter(filter ,true); /* convert the remote machines IP address to an array of bytes called recAddr */ InetAddress[] recAddr0 = InetAddress.getAllByName(ipaddress); byte[] recAddr = recAddr0[0].getAddress(); /* get the MAC address of the remote machine using the arp method */ byte [] recMac=arp(InetAddress.getByAddress(recAddr), \ InetAddress.getByAddress(myIPAdd),networkInterfaceID); /* initiate our sender instance of the network device */ JpcapSender sender=JpcapSender.openDevice(device); /* Initialize a new instance of TCPPacket called p */ TCPPacket p=new TCPPacket(srcPort,dstPort,60,60,false,true, \ false,false,false,false,false,false,65535,0); /* Set the IP version 4 parameters of the TCPPacket */ p.setIPv4Parameter(0,false,false,false,0,false,false,false, \ 0,0,200,IPPacket.IPPROTO_TCP,InetAddress.getByAddress(myIPAdd), \ InetAddress.getByAddress(recAddr)); /* Set the data to send with the connection */ p.data="".getBytes(); /* Initiate the EthernetPacke ether that will transport the TCP packet and start to build the packet */ EthernetPacket ether=new EthernetPacket(); ether.frametype=EthernetPacket.ETHERTYPE_IP; //set the Ethernet Frame type to an IP request ether.src_mac=myMac; // Set the source MAC address to // our MAC address ether.dst_mac=recMac; // Set the destination MAC address // to the remote MAC add p.datalink=ether; // Set the Data Link Layer of the // IPpacket to the Ethernet packet /* send out the TCP packet */ sender.sendPacket(p); /* Captor the packets coming back based on the filter that was set with the setFilter method */ TCPPacket returnPacket = (TCPPacket)captor.getPacket(); /* If the packet captor times out set the return value to false */ if (returnPacket == null) booleanret=false; else { /* If we received a return packet from the remote machine set the return value to true */ System.out.println("received from: " + returnPacket.src_ip); System.out.println("RST: " + returnPacket.rst); booleanret=true; } } catch (Exception e) { System.out.println(e); return(false); } return booleanret; } }