/* * This file is part of jsFlow. * * Copyright (c) 2009 DE-CIX Management GmbH <http://www.de-cix.net> - All rights * reserved. * * Author: Thomas King <thomas.king@de-cix.net> * * This software is licensed under the Apache License, version 2.0. A copy of * the license agreement is included in this distribution. */ package net.decix.jsflow.demo; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.util.Vector; import net.decix.jsflow.header.CounterRecordHeader; import net.decix.jsflow.header.EthernetInterfaceCounterHeader; import net.decix.jsflow.header.ExpandedCounterSampleHeader; import net.decix.jsflow.header.ExpandedFlowSampleHeader; import net.decix.jsflow.header.FlowRecordHeader; import net.decix.jsflow.header.GenericInterfaceCounterHeader; import net.decix.jsflow.header.SampleDataHeader; import net.decix.jsflow.header.SFlowHeader; import net.decix.util.HeaderParseException; import net.decix.util.Utility; public class DumpHeader { public static void main(String args[]) { try { DatagramSocket ds = new DatagramSocket(6343); System.out.println("Datagram socket for receiving created."); DatagramPacket dp = null; while (true) { try { byte[] data = new byte[2500]; dp = new DatagramPacket(data, data.length); ds.receive(dp); System.out.println(); System.out.println("Pkt recvd: " + dp.getAddress().toString() + ":" + dp.getPort() + " -> " + ds.getLocalAddress().toString() + ":" + ds.getLocalPort()); SFlowHeader rph = SFlowHeader.parse(dp.getData()); Vector<SampleDataHeader> sdhs = rph.getSampleDataHeaders(); sdhs = rph.getSampleDataHeaders(); for (SampleDataHeader sdh : sdhs) { if (sdh.getSampleDataFormat() == SampleDataHeader.EXPANDEDFLOWSAMPLE) { ExpandedFlowSampleHeader efsh = sdh.getExpandedFlowSampleHeader(); Vector<FlowRecordHeader> frhs = efsh.getFlowRecords(); for (FlowRecordHeader frh : frhs) { frh.getRawPacketHeader().getHeaderProtocol(); long macSource = frh.getRawPacketHeader().getMacHeader().getSource(); long macDestination = frh.getRawPacketHeader().getMacHeader().getSource(); System.out.println("FlowRecord: Communication " + macSource + "->" + macDestination); } } if (sdh.getSampleDataFormat() == SampleDataHeader.EXPANDEDCOUNTERSAMPLE) { ExpandedCounterSampleHeader ecsh = sdh.getExpandedCounterSampleHeader(); Vector<CounterRecordHeader> crhs = ecsh.getCounterRecords(); for (CounterRecordHeader crh : crhs) { if (crh.getCounterDataFormat() == CounterRecordHeader.ETHERNETINTERFACECOUNTER) { EthernetInterfaceCounterHeader eich = crh.getEthernetInterfaceCounterHeader(); System.out.println("If: " + ecsh.getSourceIDIndex()); System.out.println(" Excessive Collisions: " + eich.getDot3StatsExcessiveCollisions() + " Late Collisions: " + eich.getDot3StatsLateCollisions()); } if (crh.getCounterDataFormat() == CounterRecordHeader.GENERICINTERFACECOUNTER) { GenericInterfaceCounterHeader gic = crh.getGenericInterfaceCounterHeader(); System.out.println("If: " + gic.getIfIndex() + " Direction: " + gic.getIfDirection()); System.out.println(" In: Errs: " + gic.getIfInErrors() + " Unicast: " + gic.getIfInUcastPkts() + " Multicast: " + gic.getIfInMulticastPkts() + " Broadcast: " + gic.getIfInBroadcastPkts()); System.out.println(" Out: Errs: " + gic.getIfOutErrors() + " Unicast: " + gic.getIfOutUcastPkts() + " Multicast: " + gic.getIfOutMulticastPkts() + " Broadcast: " + gic.getIfOutBroadcastPkts()); } } } } } catch (HeaderParseException hpe) { hpe.printStackTrace(); System.out.println(Utility.dumpBytes(dp.getData())); } } } catch (SocketException se) { se.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } } }