Article Figure 1 Figure 2 Listing 1 Listing 2
Listing 3 Listing 4 Listing 5 sep2006.tar

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;
    }
   
}