Changeset 14

Show
Ignore:
Timestamp:
04/17/08 21:46:25 (10 years ago)
Author:
rmcmillen
Message:

Modified the frequency of update to sensor last_upd_sec (See Ticket #3). It now happens at most every second vice every packet. Also added the is_local column to the schema; the -n network address and -b bitmask flags to hflow in order to enable identification of local traffic. Finally, modified the hflow startup script to provide these new flags on startup. It gets the data from the HwLAN_IP_RANGE variable.

Location:
trunk
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/configure.in

    r13 r14  
    11AC_INIT(hflow.cpp) 
    2 AM_INIT_AUTOMAKE(hflow,1.99.24) 
     2AM_INIT_AUTOMAKE(hflow,1.99.25) 
    33AM_CONFIG_HEADER(config.h) 
    44 
  • trunk/flow_db_inserter_block.hpp

    r13 r14  
    6565    bool db_id_added_to_flow; 
    6666    unsigned int sensor_id; 
     67    unsigned int cur_secs; 
     68    unsigned int local_network; 
     69    unsigned int local_netmask; 
    6770    //int initialized; 
    6871public: 
     
    7982    int initialize(int in_numoutputs,char* dbtype, char* dbname, char* username,char *password); 
    8083    int initialize(int in_numoutputs,char* dbtype, char* dbname, char* username,char *password,unsigned int in_sensor_id); 
     84    int initialize_local_network(unsigned int network, int bitmask); 
    8185 
    8286    int DB_updater(Tagged_IP_Packet *in_packet); 
     
    8993    int db_sensor_update(Tagged_IPV4_Flow *in_flow); 
    9094    unsigned int set_sensor_id(const unsigned int in_id){sensor_id=in_id; return sensor_id;}; 
     95    bool isLocalNetwork(unsigned int addr); 
    9196}; 
    9297 
     
    101106///////////////////////////////////// 
    102107////////Class implementation 
     108int Flow_DB_Inserter_Block:: initialize_local_network(unsigned int network,  
     109                                                      int bitmask) 
     110{ 
     111   local_netmask = (local_netmask << (32 - bitmask)); 
     112   local_network = (network & local_netmask); 
     113    
     114   return 0; 
     115} 
     116 
     117bool Flow_DB_Inserter_Block:: isLocalNetwork(unsigned int addr) 
     118{ 
     119   unsigned int network = (addr & local_netmask); 
     120   if (network == local_network) 
     121   { 
     122      return true; 
     123   } 
     124   return false; 
     125} 
    103126 
    104127Flow_DB_Inserter_Block:: Flow_DB_Inserter_Block(){ 
     
    106129  sensor_id=0; 
    107130  queue_size=0; 
     131  cur_secs = 0; 
     132  local_network = 0; 
     133  local_netmask = 0xFFFFFFFF; 
    108134 }; 
    109135// 
     
    290316        db_flow_insert(current_flow); 
    291317#endif 
    292         ///update sensor table 
    293         db_sensor_update(current_flow); 
     318        ///update sensor table if required 
     319        if (current_flow->stats.src.end_time > cur_secs) 
     320        { 
     321            db_sensor_update(current_flow); 
     322            cur_secs = current_flow->stats.src.end_time; 
     323        } 
    294324 
    295325        ///step 5 delete 
     
    335365int Flow_DB_Inserter_Block::db_flow_insert(Tagged_IPV4_Flow *in_flow){//should be renamed mysql insert!! 
    336366   static char *section1="INSERT INTO flow" 
    337                 "(sensor_id, " 
     367                "(sensor_id, is_local, " 
    338368                " src_ip,dst_ip,src_port,dst_port,ip_proto," 
    339369                " src_start_sec,src_start_msec,src_end_sec,src_end_msec," 
     
    353383   unsigned int last_time; 
    354384   unsigned int curr_packet_size; 
     385   int local = 0; 
    355386   
    356387   db_id_added_to_flow=false; 
     
    502533          //Not found, do a regular insert, but first free the result 
    503534           rvalue=dbi_result_free(result); 
     535           if (isLocalNetwork(in_flow->source_ip)) 
     536           { 
     537              local = 1; 
     538           } 
    504539 
    505540           snprintf(query, 10000, 
    506541                 "%s (%u,  %u,%u,%u,%u,%u,    %u,%u,%u,%u, %u,%u,%u,%u,%u,%u,%u,  %u,%u,%u,%u, %u,%u,%u,%u,%u,%u  )", 
    507542                  section1, 
    508                   sensor_id, 
     543                  sensor_id, local, 
    509544                  in_flow->source_ip,in_flow->dest_ip,in_flow->src_port,in_flow->dst_port, in_flow->protocol, 
    510545                  in_flow->stats.src.start_time,in_flow->stats.src.start_msec, 
     
    592627int Flow_DB_Inserter_Block::db_flow_insert_mysql(Tagged_IPV4_Flow *in_flow){//should be renamed mysql insert!! 
    593628   static char *section1="INSERT INTO flow" 
    594                 "(sensor_id, " 
     629                "(sensor_id, is_local, " 
    595630                " src_ip,dst_ip,src_port,dst_port,ip_proto," 
    596631                " src_start_sec,src_start_msec,src_end_sec,src_end_msec," 
     
    610645   unsigned int last_time; 
    611646   unsigned int curr_packet_size; 
     647   int local = 0; 
    612648   
    613649   db_id_added_to_flow=false; 
     
    615651   if (0==in_flow->annot[FLOW_ANNOT_DB_ID].as_int32){ //no db id known, do an insert 
    616652 
     653        if (isLocalNetwork(in_flow->source_ip)) 
     654        { 
     655           local = 1; 
     656        } 
    617657        snprintf(query, 10000, 
    618                  "%s (%u, %u,%u,%u,%u,%u,    %u,%u,%u,%u, %u,%u,%u,%u,%u,%u,%u,  %u,%u,%u,%u, %u,%u,%u,%u,%u,%u  )" 
     658                 "%s (%u, %d, %u,%u,%u,%u,%u,    %u,%u,%u,%u, %u,%u,%u,%u,%u,%u,%u,  %u,%u,%u,%u, %u,%u,%u,%u,%u,%u  )" 
    619659                 " ON DUPLICATE KEY UPDATE src_end_sec=%u,src_end_msec=%u," 
    620660                 "src_packets=%u,src_bytes=%u,src_ip_flags=%u,src_tcp_flags=%u,src_icmp_packets=%u,src_icmp_seen=%u," 
     
    624664                  section1, 
    625665                  sensor_id, 
     666                  local, 
    626667                  in_flow->source_ip,in_flow->dest_ip,in_flow->src_port,in_flow->dst_port, in_flow->protocol, 
    627668                  in_flow->stats.src.start_time,in_flow->stats.src.start_msec, 
  • trunk/hflow.cpp

    r10 r14  
    2222#include <stdlib.h> 
    2323#include <pwd.h> 
     24#include <arpa/inet.h> 
    2425 
    2526#include "element.h" 
     
    6768         "              [-D]\n" 
    6869         "              [-z username] \n" 
    69          "              [-f bpf_filter]\n\n"); 
     70         "              [-f bpf_filter]\n" 
     71         "              [-n local network address (default = 0)]\n" 
     72         "              [-b local network bitmask (default = 32)]\n\n"); 
    7073  printf("must include at least one input type and for live options no partial data is printed for now\n"); 
    7174  return 0; 
     
    142145 struct passwd *pw; 
    143146 uint16_t sebek_dst_port=1101; 
     147 int network = 0; 
     148 int bitmask = 32; 
    144149 
    145150       /* set up the handler */ 
     
    152157 conf_dir=default_logdir;  
    153158 //cout << "hello world"<<endl; 
     159  
    154160 
    155161 //get options and initialize the variables 
    156  while ((r = getopt(argc, argv, "hVDSTi:r:u:w:d:E:l:s:f:L:C:z:p:k:")) != -1){ 
     162 while ((r = getopt(argc, argv, "hVDSTi:r:u:w:d:E:l:s:f:L:C:z:p:k:n:b:")) != -1){ 
    157163 
    158164      switch(r){ 
     
    205211        case 'k': sebek_dst_port=atoi(optarg); 
    206212                  break; 
    207  
     213        case 'n': 
     214                  network = inet_network(optarg); 
     215                  if (network == -1) 
     216                  { 
     217                     network = 0; 
     218                  } 
     219                  break; 
     220        case 'b': 
     221                  bitmask = atoi(optarg); 
     222                  if ( (bitmask < 0) || (bitmask > 32) ) 
     223                  { 
     224                     bitmask = 32; 
     225                  } 
     226                  break; 
    208227        } 
    209228 } 
     229 
     230 db_inserter.initialize_local_network(network, bitmask); 
     231 
    210232 //check options and send user to usage if something is not quite correct 
    211233 if(num_inputs!=1){ 
  • trunk/hflow.spec

    r13 r14  
    11Summary:  Hflow data Coalsesing  
    22Name: hflow 
    3 Version: 1.99.24 
    4 Release: 2 
     3Version: 1.99.25 
     4Release: 3 
    55License: GPL 
    66Group:   Applications/Honeynet 
  • trunk/hflowd.schema

    r1 r14  
    158158        client_os_id        INT         UNSIGNED NOT NULL DEFAULT 0, 
    159159        server_os_id        INT         UNSIGNED NOT NULL DEFAULT 0, 
     160        is_local        TINYINT    UNSIGNED NOT NULL DEFAULT 0, 
    160161 
    161162        PRIMARY KEY   ( sensor_id,flow_id ), 
  • trunk/init.d/hflow

    r11 r14  
    3535fi 
    3636 
    37  
     37if [ "${HwLAN_IP_RANGE}"X = "X" ]; then 
     38   LOCAL_NET_ADDR=0 
     39   LOCAL_NET_BITS=32 
     40else 
     41   LOCAL_NET_ADDR=${HwLAN_IP_RANGE%/*} 
     42   LOCAL_NET_BITS=${HwLAN_IP_RANGE#*/} 
     43fi 
    3844 
    3945## 
     
    5258        cd /etc/hflow 
    5359        if [ "x$HwBPF_DISABLE" = "xyes" ]; then 
    54                 /usr/bin/hflow -D -i ${HwLAN_IFACE} -p ${PIDFILE} -d 1   \ 
     60                /usr/bin/hflow -D -i ${HwLAN_IFACE} -p ${PIDFILE} -d 1  \ 
     61                        -n ${LOCAL_NET_ADDR} -b ${LOCAL_NET_BITS}       \ 
    5562                        -s ${HwSENSOR_ID} -z _hflow -L ${LOG_DIR}       \ 
    5663                        ${SEBEK_PARMS} 
     
    6471                /usr/bin/hflow -D -i ${HwLAN_IFACE} -p ${PIDFILE} -d 1   \ 
    6572                        -f "${BPF_FILTER}" \ 
     73                        -n ${LOCAL_NET_ADDR} -b ${LOCAL_NET_BITS}       \ 
    6674                        -s ${HwSENSOR_ID} -z _hflow -L ${LOG_DIR}       \ 
    6775                        ${SEBEK_PARMS}