public static void main(String[] args) {
    /*  ipaddress.add("139.130.4.5");
            ipaddress.add("74.125.226.22");
            ipaddress.add("69.171.230.68");
    */

    final StringBuilder errbuf = new StringBuilder();
    final Pcap pcap = Pcap.openOffline(FILENAME, errbuf);
    if (pcap == null) {
      System.err.println(errbuf);
      return;
    }
    pcap.loop(
        Pcap.LOOP_INFINITE,
        new JPacketHandler<StringBuilder>() {

          final Tcp tcp = new Tcp();

          final Ip4 ip4 = new Ip4();
          final Http http = new Http();

          public void nextPacket(JPacket packet, StringBuilder errbuf) {

            if (packet.hasHeader(Tcp.ID)) {
              if (packet.hasHeader(tcp) && packet.hasHeader(http)) {

                packet.getHeader(ip4);
                byte[] sip = new byte[4];
                sip = packet.getHeader(ip4).source();
                byte[] dip = new byte[4];
                dip = packet.getHeader(ip4).destination();
                String destinationip = org.jnetpcap.packet.format.FormatUtils.ip(dip);
                if (!(ipaddress.contains(destinationip))) {
                  ipaddress.add(destinationip);
                }
              }
            }
          }
        },
        errbuf);
    ipaddresscollection();
    //   pcap.close();

  }
 /**
  * @param descriptor the protocol descriptor
  * @param listener the packet listener
  * @param file the dump file
  * @throws IOException if any error occur while reading the file
  */
 public FileProtocolParser(ProtocolDescriptor descriptor, PacketListener listener, File file)
     throws IOException {
   super(descriptor, listener, Pcap.openOffline(file.getAbsolutePath(), new StringBuilder()));
 }
  public void create() {

    /**
     * ************************************************************************* First we setup
     * error buffer and name for our file
     * ************************************************************************
     */
    final StringBuilder errbuf = new StringBuilder(); // For any error msgs

    final String file = "captured.txt";
    final String pcapFile = "captured.pcap";

    // delete the old txt file by opening it as an output

    try {
      FileWriter results = new FileWriter(file);
      // Create new File.
      BufferedWriter out = new BufferedWriter(results);

      out.close();
    } catch (IOException e) {
      System.out.println("The file cannot be opened " + e);
    }

    //

    System.out.println("Opening file for reading:" + pcapFile);
    /**
     * ************************************************************************* Second we open up
     * the selected file using openOffline call
     * ************************************************************************
     */
    Pcap pcap = Pcap.openOffline(pcapFile, errbuf);

    if (pcap == null) {
      System.err.printf("Error while opening device for capture: " + errbuf.toString());
      return;
    }

    /**
     * ************************************************************************* Third we create a
     * packet handler which will receive packets from the libpcap loop.
     * ************************************************************************
     */
    PcapPacketHandler<String> jpacketHandler =
        new PcapPacketHandler<String>() {

          public void nextPacket(PcapPacket packet, String user) {

            Tcp tcp = new Tcp();
            Ip4 ip = new Ip4();
            Udp udp = new Udp();

            final Http http = new Http();

            int TotalSize = 0;
            int caplen = 0;
            int ext = 0;
            int ack = 0;
            int istcp = 0;
            int ishttp = 0;
            int isudp = 0;
            int headerLength = 0;
            int PayloadLength = 0;

            // System.out.println(packet.getTotalSize());//costas
            // System.out.printf( " total size %-6d caplen= %6d  %6d  ",
            // packet.getTotalSize(),
            // packet.getCaptureHeader().caplen(),packet.getTotalSize()-
            // packet.getCaptureHeader().caplen());//costas

            TotalSize = packet.getTotalSize();
            caplen = packet.getCaptureHeader().caplen();

            PayloadLength = 0;
            headerLength = 0;

            ext = 0;
            ack = 0;
            // ****************************************************
            String ssourceIp = "";
            String destinIp = "";
            String sourceIp = "";
            if (packet.hasHeader(ip)) {
              sourceIp = FormatUtils.ip(ip.source());
              destinIp = FormatUtils.ip(ip.destination());
            }

            if (packet.hasHeader(udp)) // for udp packets
            {
              isudp = 1;
              headerLength = udp.getHeaderLength();
              if (packet.hasHeader(ip)) // check for the existance of ip
              {

                InetAddress ipAddress = null;

                try {
                  ipAddress = InetAddress.getByAddress(ip.source()); // get
                  // the
                  // ip
                  // address
                  // ipAddress=
                  // InetAddress.getByAddress(ip.destination());
                } catch (UnknownHostException e) {
                }

                ssourceIp = ipAddress.getHostAddress(); // get the ip
                // address

                if (sourceIp.startsWith("10.3.")
                    || sourceIp.startsWith("192.168.")
                    || sourceIp.startsWith("10.239.")
                    || sourceIp.startsWith("10.4.")) {
                  ext = 0; // out-going message
                } else {
                  ext = 1; // in-coming message
                }

                ack = 0;
              } // end for header ip

              PayloadLength = udp.getPayloadLength();

            } // end for udp packet.
            else {
              isudp = 0;
            }

            // *******************************************************************

            if (packet.hasHeader(http)) {
              ishttp = 1;
              PayloadLength = http.getPayloadLength();
              if (packet.hasHeader(ip)) //
              {

                InetAddress ipAddress = null;
                try {
                  ipAddress = InetAddress.getByAddress(ip.source());
                } catch (UnknownHostException e) {
                }

                ssourceIp = ipAddress.getHostAddress(); // get the ip
                // address

                if (sourceIp.startsWith("10.3.")
                    || sourceIp.startsWith("192.168.")
                    || sourceIp.startsWith("10.239.")
                    || sourceIp.startsWith("10.4.")) {
                  ext = 0; // internal address
                } else {
                  ext = 1; // external
                }
              } // end for header ip
            } else // not http
            {
              ishttp = 0;
            } // end for http

            // **********************************************
            if (packet.hasHeader(tcp)) {
              istcp = 1;
              headerLength = tcp.getHeaderLength();
              if (packet.hasHeader(ip)) // check for existance of ip
              // header
              {

                InetAddress ipAddress = null;
                try {
                  ipAddress = InetAddress.getByAddress(ip.source());
                } catch (UnknownHostException e) {
                }

                ssourceIp = ipAddress.getHostAddress(); // get the ip
                // address

                if (sourceIp.startsWith("10.3.")
                    || sourceIp.startsWith("192.168.")
                    || sourceIp.startsWith("10.239.")
                    || sourceIp.startsWith("10.4.")) {

                  ext = 0; // out-going message
                } else {

                  ext = 1; // in-coming message
                }

                if (tcp.flags_ACK() == true) ack = 1;
                else ack = 0;
              } // end for header ip

              PayloadLength = tcp.getPayloadLength();

            } // end for tcp packet.
            else {
              istcp = 0;
            }

            String rec =
                istcp
                    + ","
                    + ishttp
                    + ","
                    + isudp
                    + ","
                    + ack
                    + ","
                    + ext
                    + ","
                    + TotalSize
                    + ","
                    + PayloadLength
                    + ","
                    + caplen
                    + ","
                    + headerLength
                    + ","
                    + sourceIp
                    + ","
                    + destinIp
                    + ","
                    + user;
            write_rec(file, rec); // write raw data in a text file.
          }
        };

    // capturing all the packets of the Pcap file
    try {
      pcap.loop(Pcap.LOOP_INFINITE, jpacketHandler, "?");
    } finally {

      // Last thing to do is close the pcap handle
      pcap.close();
      System.out.println("End of packet capturing..Pcap file closed");
      System.out.println("Now the analyser is running...");
      scanTxtFile(file, "test-final.arff"); // scans the file.txt and
      // creates a weka file
      // (arff)
    }
  } // end of main