// -*- coding: utf-8 -*- //+---------------------------------------------------------------------------+ //| 01001110 01100101 01110100 01111010 01101111 01100010 | //| | //| Netzob : Inferring communication protocols | //+---------------------------------------------------------------------------+ //| Copyright (C) 2011-2017 Georges Bossert and Frédéric Guihéry | //| This program is free software: you can redistribute it and/or modify | //| it under the terms of the GNU General Public License as published by | //| the Free Software Foundation, either version 3 of the License, or | //| (at your option) any later version. | //| | //| This program is distributed in the hope that it will be useful, | //| but WITHOUT ANY WARRANTY; without even the implied warranty of | //| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | //| GNU General Public License for more details. | //| | //| You should have received a copy of the GNU General Public License | //| along with this program. If not, see . | //+---------------------------------------------------------------------------+ //| @url : http://www.netzob.org | //| @contact : contact@netzob.org | //| @sponsors : Amossys, http://www.amossys.fr | //| Supélec, http://www.rennes.supelec.fr/ren/rd/cidre/ | //+---------------------------------------------------------------------------+ //Compilation Windows //cl -Fe_libScoreComputation.pyd -Ox -Ot -openmp -LD /I"C:\Python26\include" /I"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include" libScoreComputation.c "C:\Python26\libs\python26.lib" "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\vcomp.lib" //+---------------------------------------------------------------------------+ //| Import Associated Header //+---------------------------------------------------------------------------+ #include "scoreComputation.h" #ifdef _WIN32 #include #include #endif /** computeSimilarityMatrix: This functions computes a matrix which contains the similarity scores between the provided messages @param nbMessage: the number of provided messages in the param messages @param messages: a list containing messages to work with @param debug: activate or deactive debug messages @param scoreMatrix: a double-dimension array where the matrix score will be stored */ void computeSimilarityMatrix(int nbMessage, t_message* messages, Bool debugMode, float** scoreMatrix) { int i; t_message tmpResultMessage; t_score score; // local variable int p = 0; /** Stops the execution if user requested so */ if (callbackIsFinish() == 1) { return; } /** We loop over each different couple of messages messages[i] and messages [p] with i < p (diag. superior matrix) */ for (i = 0; i < nbMessage; i++) { /** Stops the execution if user requested so */ if (callbackIsFinish() == 1) { return; } for (p = i + 1; p < nbMessage; p++) { /** Computes the NeedlemanScore between messages i and p result is stored in the matrix[i][p] */ tmpResultMessage.len = 0; score.s1 = 0; score.s2 = 0; score.s3 = 0; tmpResultMessage.score = &score; if (debugMode) { printf("Align two messages (%d, %d)\n", i, p); } char * regex = alignTwoMessages(&tmpResultMessage, FALSE, &messages[i], &messages[p], debugMode); if (debugMode) { printf("Regex = %s\n", regex); } free(regex); scoreMatrix[i][p] = computeDistance(tmpResultMessage.score); } /** Update the current status */ double val = (double) 100.0 * (i * nbMessage + nbMessage - 1) / ((nbMessage - 1) * (nbMessage + 1)); if (callbackStatus(0,val,"Building Status (%.2lf %%)",(float) val) == -1) { printf("Error, error while executing C callback.\n"); } } }