package net.decix.jipfix;
import net.decix.jipfix.header.DataRecord;
import net.decix.jipfix.header.L2IPDataRecord;
import net.decix.jipfix.header.MessageHeader;
import net.decix.jipfix.header.SetHeader;
import net.decix.util.HeaderParseException;
import org.pcap4j.core.NotOpenException;
import org.pcap4j.core.PacketListener;
import org.pcap4j.core.PcapHandle;
import org.pcap4j.core.PcapNativeException;
import org.pcap4j.core.Pcaps;
import org.pcap4j.packet.Packet;
import org.pcap4j.packet.UdpPacket;
public class PCAPParserARP {
// private static final String PCAP_FILE_READ = "/Users/tking/Downloads/2014-03-05_IPFIX_capture01.pcap"; // IPFIX-Test.pcap
// private static final String PCAP_FILE_READ = "/Users/tking/Downloads/IPFIX-Test.pcap";
// private static final String PCAP_FILE_READ = "/Users/tking/Downloads/test.pcap";
private static final String PCAP_FILE_READ = "/Volumes/Transcend/ipfix-2014-04-16.1.pcap";
public static void main(String[] args) throws PcapNativeException, NotOpenException, InterruptedException {
PcapHandle handleRead = Pcaps.openOffline(PCAP_FILE_READ);
PacketListener listener = new PacketListener() {
long numberOnePackets = 0;
long numberTwoPackets = 0;
long numberThreePackets = 0;
long numberFourPackets = 0;
long numberFivePackets = 0;
long numberLargerFivePackets = 0;
long maxValue = 0;
public void gotPacket(Packet fullPacket) {
// System.out.println(packet);
UdpPacket udpPacket = fullPacket.get(UdpPacket.class);
if (udpPacket == null) return;
// if (udpPacket.getHeader().getDstPort().value() != 2055) return;
// System.out.println(packet);
byte[] bytes = udpPacket.getRawData();
byte[] onlyIPFIX = new byte[bytes.length - 8];
System.arraycopy(bytes, 8, onlyIPFIX, 0, bytes.length - 8);
try {
MessageHeader mh = MessageHeader.parse(onlyIPFIX);
for (SetHeader sh : mh.getSetHeaders()) {
for (DataRecord dr : sh.getDataRecords()) {
if (dr instanceof L2IPDataRecord) {
L2IPDataRecord lidr = (L2IPDataRecord) dr;
// if (lidr.getSourceTransportPort() == 0) {
// System.out.println(lidr);
// }
if (lidr.getPacketDeltaCount() == 1) {
numberOnePackets++;
} else if (lidr.getPacketDeltaCount() == 2) {
numberTwoPackets++;
} else if (lidr.getPacketDeltaCount() == 3) {
numberThreePackets++;
} else if (lidr.getPacketDeltaCount() == 4) {
numberFourPackets++;
} else if (lidr.getPacketDeltaCount() == 5) {
numberFivePackets++;
} else {
numberLargerFivePackets++;
}
if (lidr.getPacketDeltaCount() > maxValue) maxValue = lidr.getPacketDeltaCount();
if (lidr.getPacketDeltaCount() > 1000) System.out.println(lidr);
// if ((!Utility.isConfigured(lidr.getDestinationIPv4Address())) &&
// (!Utility.isConfigured(lidr.getSourceIPv4Address())) &&
// (!Utility.isConfigured(lidr.getDestinationIPv6Address())) &&
// (!Utility.isConfigured(lidr.getSourceIPv6Address()))) {
// System.out.println(lidr);
// }
}
}
}
} catch (HeaderParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// } catch (UtilityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
}
public String toString() {
return new String("NumberOnePackets: " + numberOnePackets + " " +
"NumberTwoPackets: " + numberTwoPackets + " " +
"NumberThreePackets: " + numberThreePackets + " " +
"NumberFourPackets: " + numberFourPackets + " " +
"NumberFivePackets: " + numberFivePackets + " " +
"NumberLargerFivePackets: " + numberLargerFivePackets + " " +
"MaxValue: " + maxValue);
}
};
handleRead.loop(-1, listener);
handleRead.close();
System.out.println(listener.toString());
}
}