2011-03-01 3 views
0

Je suis en train de développer un IDS/IPS qui utilise des données NetFlow pour déterminer si une attaque est en cours. Je n'avais pas les moyens d'avoir un routeur CISCO cher, alors j'ai acheté un routeur LINKSYS sur lequel j'ai installé DD-WRT. DD-WRT envoie des paquets Netflow v5 à votre machine préférée, c'est comme si vous aviez un routeur CISCO mais plus ancien. Fondamentalement, vous obtenez un routeur de 200 $ à 500 $ pour 80 $ et un peu de peaufinage. J'ai configuré le routeur, je reçois les paquets, j'ai même utilisé l'outil fourni par DD-WRT pour capturer rFlow (ils l'ont appelé comme ça mais c'est netflow v5) et tout fonctionne.Lire le contenu du paquet netflow/rflow (dd-wrt)

Mon application devra tout faire en interne ce qui signifie que j'ai besoin de capturer des paquets rflow, les lire et dessiner les hypothèses en fonction de mes lectures. J'ai commencé à développer en JAVA et à mettre en place un démon UDP à écouter en 2055 (port de réception des paquets rflow). Tout va bien, je reçois les paquets mais quand j'essaie de voir le contenu, je reçois des personnages étranges, comme si je vidais des choses de la mémoire.

Voici mon code pour configurer le démon et lire les données.

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()); 
     } 

J'ai trouvé une bibliothèque appelée jflow..but il n'y a pas de code source, donc je suis assez sceptique à l'utiliser. Je me demandais si quelqu'un pouvait me dire comment lire le contenu des paquets qui me sont envoyés. Depuis que je suis à un stade précoce du développement, je ne suis pas obligé d'utiliser JAVA, je pourrais aller en C++. Mon plus gros problème, quel que soit le langage de programmation, est comment lire le contenu de ces paquets afin de pouvoir tirer les bonnes conclusions dont j'ai besoin pour mes autres modules.

Répondre

1

Les paquets rFlow/NetFlow v5 sont des paquets binaires, donc affichés comme du texte, ils seront illisibles.

Le format de paquet pour les paquets v5 est connu, et peut être trouvé avec une recherche google. This semble être une bonne référence.

Notez que le démon rFlow sur le dd-wrt a un bug de longue date où il ne remplit pas correctement les champs d'interface d'entrée ou de sortie.

+0

merci pour cela, j'ai réussi à le résoudre depuis. Je ne connaissais pas le bug de l'interface mais je m'en fous car mon application ne va pas s'en servir. – user253530

+0

@ user253530 Pouvez-vous poster votre solution comme une réponse pour que d'autres personnes ayant le même problème puissent la voir? –