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.HeaderBytesException;
import net.decix.util.HeaderParseException;
import net.decix.util.Utility;
import net.decix.util.UtilityException;
import org.pcap4j.core.NotOpenException;
import org.pcap4j.core.PacketListener;
import org.pcap4j.core.PcapDumper;
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;
import org.pcap4j.util.MacAddress;
public class PrintPCAPParser {
private static final String PCAP_FILE_READ = "/Volumes/Transcend/ipfix-2014-04-14.3.pcap";
public static void main(String[] args) throws PcapNativeException, NotOpenException, InterruptedException {
PcapHandle handleRead = Pcaps.openOffline(PCAP_FILE_READ);
PacketListener listener = new PacketListener() {
public void gotPacket(Packet fullPacket) {
// System.out.println(packet);
UdpPacket udpPacket = fullPacket.get(UdpPacket.class);
if (udpPacket == null) 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);
//System.out.println(mh);
// if (onlyIPFIX.length != mh.getBytes().length) {
// System.out.println("Lenght: OnlyIPFIX: " + onlyIPFIX.length + " : Generated: " + mh.getBytes().length);
// }
boolean containsOtherThan306SetID = false;
for (SetHeader sh : mh.getSetHeaders()) {
if (sh.getSetID() != 306) containsOtherThan306SetID = true;
}
if (containsOtherThan306SetID) {
//System.out.printf("frame #%d%n", packet.getFrameNumber());
//System.out.println("Template?");
} else {
for (SetHeader sh : mh.getSetHeaders()) {
for (DataRecord dr : sh.getDataRecords()) {
if (dr instanceof L2IPDataRecord) {
L2IPDataRecord lidr = (L2IPDataRecord) dr;
// net.decix.util.MacAddress macSearch = new net.decix.util.MacAddress("6c:9c:ed:76:91:93");
// if (((L2IPDataRecord) dr).getSourceMacAddress().equals(macSearch) || ((L2IPDataRecord) dr).getDestinationMacAddress().equals(macSearch)) {
if ((lidr.getDot1qVlanId() != 0) && (lidr.getDot1qCustomerVlanId() != 0)) {
System.out.println(lidr);
}
// }
}
}
}
}
} catch (HeaderParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// } catch (UtilityException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
}
};
handleRead.loop(-1, listener);
handleRead.close();
}
}