2011-03-01 52 views
0

我目前正在开发一个使用NetFlow数据绘制假设是否存在持续攻击的IDS/IPS。我买不起昂贵的CISCO路由器,所以我买了一台安装了DD-WRT的LINKSYS路由器。 DD-WRT将netflow v5数据包发送到您的首选机器,因此它就像拥有一台CISCO路由器但年龄较大。基本上你可以80美元购买价值200至500美元的路由器,并稍微调整一下。 我设置了路由器,我收到了数据包,甚至使用DD-WRT提供的工具来捕获rFlow(他们将其命名为netflow v5),并且一切正常。阅读netflow/rflow(dd-wrt)数据包内容

我的应用程序将不得不在内部做所有事情,这意味着我需要捕获rflow数据包,阅读它们并根据我的读数绘制假设。 我开始用JAVA开发,并建立一个UDP守护进程来侦听2055(用于接收rflow包的端口)。所有的好,我得到的数据包,但当我试图查看内容我得到一些奇怪的人物,就像我从内存中倾销的东西。

这里是我设置deamon和读取数据的代码。

try { 
      serverSocket = new DatagramSocket(2055); 
      while (true) { 
       DatagramPacket receivedPacket = new DatagramPacket(received, received.length); 
       serverSocket.receive(receivedPacket); 
       ByteArrayInputStream byteIn = new ByteArrayInputStream(receivedPacket.getData(),0,receivedPacket.getLength()); 
       DataInputStream in = new DataInputStream(byteIn); 
       String input = ""; 
       while((input = in.readLine()) != null) { 
        System.out.println(input + "\n"); 
       } 
       Inet4Address from = (Inet4Address) receivedPacket.getAddress(); 
       System.out.println("FROM: " + from + "\nDATA: " + data[4]); 
      } 
     } catch (SocketException ex) { 
      System.out.println(ex.getMessage()); 
     } 

我找到了一个名为jflow ..的库,但没有源代码,所以我对使用它非常怀疑。我想知道是否有人能告诉我如何才能真正阅读发送给我的数据包的内容。由于我处于开发的早期阶段,我不一定会使用JAVA,我可以使用C++。我最大的问题是,不管编程语言如何读取这些数据包的内容,以便我可以得出我需要的其他模块的正确结论。

回答

1

rFlow/NetFlow v5数据包是一个二进制数据包的布局,所以被视为文本,他们将出现,很好,不可读。

v5数据包的数据包格式是已知的,可以在谷歌搜索中找到。 This似乎是一个很好的参考。

请注意,dd-wrt上的rFlow守护进程有一个长期存在的错误,它没有正确填写输入或输出接口字段。

+0

感谢您的这一点,我从那时起就设法解决了这个问题。不知道接口错误,虽然我并不在乎,因为我的应用程序不会依赖它。 – user253530 2011-03-31 20:01:58

+0

@ user253530您可以将您的解决方案作为答案发布,以便具有相同问题的其他人可以看到它吗? – 2011-12-09 16:39:45