Browse Source

use designated counts for IP entropy calculations

Jens Keim 5 years ago
parent
commit
55779ec017

+ 13 - 14
code_boost/src/cxx/statistics.cpp

@@ -48,8 +48,8 @@ void statistics::checkTCPChecksum(const std::string &ipAddressSender, const std:
 std::vector<float> statistics::calculateLastIntervalIPsEntropy(std::chrono::microseconds intervalStartTimestamp){
     if(this->getDoExtraTests()) {
         // TODO: change datastructures
-        std::vector<int> IPsSrcPktsCounts;
-        std::vector<int> IPsDstPktsCounts;
+        std::vector<long> IPsSrcPktsCounts;
+        std::vector<long> IPsDstPktsCounts;
 
         std::vector<double> IPsSrcProb;
         std::vector<double> IPsDstProb;
@@ -57,24 +57,22 @@ std::vector<float> statistics::calculateLastIntervalIPsEntropy(std::chrono::micr
         int pktsSent = 0, pktsReceived = 0;
 
         for (auto i = ip_statistics.begin(); i != ip_statistics.end(); i++) {
-            int IPsSrcPktsCount = 0;
-            for (auto j = i->second.pkts_sent_timestamp.end(); j != i->second.pkts_sent_timestamp.begin(); j--) {
-                if(*j >= intervalStartTimestamp)
-                    IPsSrcPktsCount++;
-                else
-                    break;
+            long IPsSrcPktsCount = 0;
+            if (intervalCumIPStats.count(i->first) == 0) {
+                IPsSrcPktsCount = i->second.pkts_sent;
+            } else {
+                IPsSrcPktsCount = i->second.pkts_sent-intervalCumIPStats[i->first].pkts_sent;
             }
             if(IPsSrcPktsCount != 0) {
                 IPsSrcPktsCounts.push_back(IPsSrcPktsCount);
                 pktsSent += IPsSrcPktsCount;
             }
 
-            int IPsDstPktsCount = 0;
-            for (auto j = i->second.pkts_received_timestamp.end(); j != i->second.pkts_received_timestamp.begin(); j--) {
-                if(*j >= intervalStartTimestamp)
-                    IPsDstPktsCount++;
-                else
-                    break;
+            long IPsDstPktsCount = 0;
+            if (intervalCumIPStats.count(i->first) == 0) {
+                IPsDstPktsCount = i->second.pkts_received;
+            } else {
+                IPsDstPktsCount = i->second.pkts_received-intervalCumIPStats[i->first].pkts_received;
             }
             if(IPsDstPktsCount != 0) {
                 IPsDstPktsCounts.push_back(IPsDstPktsCount);
@@ -269,6 +267,7 @@ void statistics::addIntervalStat(std::chrono::duration<int, std::micro> interval
     intervalCumNovelToSCount =static_cast<int>(tos_values.size());
     intervalCumNovelMSSCount = static_cast<int>(mss_values.size());
     intervalCumNovelPortCount = static_cast<int>(port_values.size());
+    intervalCumIPStats = ip_statistics;
     intervalCumTTLValues = ttl_values;
     intervalCumWinSizeValues = win_values;
     intervalCumTosValues = tos_values;

+ 1 - 0
code_boost/src/cxx/statistics.h

@@ -667,6 +667,7 @@ private:
     int intervalCumNovelToSCount = 0;
     int intervalCumNovelMSSCount = 0;
     int intervalCumNovelPortCount = 0;
+    std::unordered_map<std::string, entry_ipStat> intervalCumIPStats;
     std::unordered_map<int,int> intervalCumTTLValues;
     std::unordered_map<int,int> intervalCumWinSizeValues;
     std::unordered_map<int,int> intervalCumTosValues;

+ 1 - 1
code_boost/src/cxx/statistics_db.h

@@ -25,7 +25,7 @@ public:
     /*
      * Database version: Increment number on every change in the C++ code!
      */
-    static const int DB_VERSION = 20;
+    static const int DB_VERSION = 21;
 
     /*
      * Methods to read from database