私は現在、NetFlow データを使用して進行中の攻撃があるかどうかを推測する IDS/IPS を開発しています。高価な CISCO ルーターを購入する余裕がなかったので、DD-WRT をインストールした LINKSYS ルーターを購入しました。DD-WRT は netflow v5 パケットを優先マシンに送信するため、古い CISCO ルーターを持っているようなものです。基本的に、200 ドルから 500 ドルのルーターを 80 ドルで手に入れ、少し調整するだけです。ルーターをセットアップし、パケットを取得し、rFlow をキャプチャするために DD-WRT が提供するツールを使用しました (名前はそのように付けられていますが、netflow v5 です)。すべてが機能します。
私のアプリケーションは内部ですべてを行う必要があるため、rflow パケットをキャプチャし、それらを読み取り、読み取りに基づいて仮定を導き出す必要があります。私は Java での開発を開始し、2055 (rflow パケットを受信するためのポート) でリッスンするように UDP デーモンをセットアップしました。大丈夫です。パケットを取得していますが、コンテンツを表示しようとすると、メモリから何かをダンプしているように、奇妙な文字が表示されます。
デーモンを設定してデータを読み取るコードは次のとおりです。
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++ を使用することもできます。私の最大の問題は、プログラミング言語に関係なく、他のモジュールに必要な正しい結論を引き出すことができるように、これらのパケットの内容を読み取る方法です。