В настоящее время я занимаюсь разработкой IDS / IPS, которая использует данные NetFlow, чтобы сделать предположения о том, что атака продолжается. У меня не было дорогого маршрутизатора CISCO, поэтому я купил маршрутизатор LINKSYS, на котором я установил DD-WRT. DD-WRT отправляет пакеты netflow v5 на предпочитаемую вами машину, так что это похоже на маршрутизатор CISCO, но старше. В основном вы получаете роутер за 200-500 долларов за 80 долларов и небольшую настройку.
Я настроил маршрутизатор, я получаю пакеты, я даже использовал инструмент 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 ++. Моя самая большая проблема, независимо от того, какой язык программирования - как читать содержимое этих пакетов, чтобы я мог сделать правильные выводы, которые мне нужны для других моих модулей.