Чтение содержимого пакета netflow / rflow (dd-wrt) - PullRequest
0 голосов
/ 02 марта 2011

В настоящее время я занимаюсь разработкой 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 ++. Моя самая большая проблема, независимо от того, какой язык программирования - как читать содержимое этих пакетов, чтобы я мог сделать правильные выводы, которые мне нужны для других моих модулей.

1 Ответ

1 голос
/ 31 марта 2011

Пакеты rFlow / NetFlow v5 представляют собой двоичную разметку пакетов, поэтому при просмотре в виде текста они будут отображаться, ну, в общем, нечитаемыми.

Формат пакета для пакетов v5 известен, и его можно найти в Google.поиск. Этот кажется хорошим справочником.

Обратите внимание, что у демона rFlow на dd-wrt есть давняя ошибка, из-за которой он не заполняет поля ввода или вывода интерфейса правильно.

...