我目前正在开发一个 IDS/IPS,它使用 NetFlow 数据来假设是否存在正在进行的攻击。我买不起昂贵的 CISCO 路由器,所以我买了一个安装 DD-WRT 的 LINKSYS 路由器。DD-WRT 将 netflow v5 数据包发送到您的首选机器,因此它就像拥有一个 CISCO 路由器但更旧。基本上,您只需花 80 美元就可以得到一个 200 至 500 美元的路由器,并稍作调整。我已经设置了路由器,我正在获取数据包,我什至使用 DD-WRT 提供的工具来捕获 rFlow(他们这样命名,但它是 netflow v5)并且一切正常。
我的应用程序必须在内部完成所有工作,这意味着我需要捕获 rflow 数据包,读取它们并根据我的读数得出假设。我开始用 JAVA 开发并设置了一个 UDP 守护程序来监听 2055(用于接收 rflow 数据包的端口)。很好,我收到了数据包,但是当我尝试查看内容时,我得到了一些奇怪的字符,就像我正在从内存中倾倒东西一样。
这是我设置守护进程和读取数据的代码。
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++。无论编程语言如何,我最大的问题是如何读取这些数据包的内容,以便我可以得出其他模块所需的正确结论。