Changeset 1553

Show
Ignore:
Timestamp:
02/14/08 22:52:21 (7 months ago)
Author:
till
Message:

nebula
- signature output in snort format

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • nebula/trunk/gst/Makefile.am

    r1546 r1553  
    1010                avl.c avl.h \ 
    1111                lca.c \ 
     12                sig.c sig.h \ 
    1213                gst.c gst.h 
  • nebula/trunk/gst/cstr.c

    r1546 r1553  
    2727 
    2828 
    29 int substr_add(substr_list *list, stnode *n, ssize_t length) { 
     29int substr_add(substr_list *list, stnode *n, ssize_t left, ssize_t right, ssize_t length) { 
    3030        ssize_t i, low, high; 
    3131 
     
    5353        list->elem[i].len       = length; 
    5454        list->elem[i].n         = n; 
     55        list->elem[i].l         = left; 
     56        list->elem[i].r         = right; 
    5557 
    5658        list->len++; 
     
    6062 
    6163int substr_len_cmp(const void *a, const void *b) { 
    62         if (((substr *)a)->len < ((substr *)b)->len) return(-1); 
    63         if (((substr *)a)->len > ((substr *)b)->len) return(1); 
     64        if (((substr *)a)->len > ((substr *)b)->len) return(-1); 
     65        if (((substr *)a)->len < ((substr *)b)->len) return(1); 
    6466        return(0); 
    6567} 
  • nebula/trunk/gst/cstr.h

    r1546 r1553  
    2727 
    2828 
    29 int substr_add(substr_list *list, stnode *n, ssize_t length); 
     29int substr_add(substr_list *list, stnode *n, ssize_t left, ssize_t right, ssize_t length); 
    3030int substr_len_cmp(const void *a, const void *b); 
    3131void substr_list_free(substr_list list); 
  • nebula/trunk/gst/gst.c

    r1547 r1553  
    3434#include "cstr.h" 
    3535#include "gst.h" 
     36#include "sig.h" 
    3637#include "signals.h" 
    3738#include "stree.h" 
     
    4748                "\t\t -l\t\t print list of occurences of common substrings\n" 
    4849                "\t\t -m <length>\t minimal substring length\n" 
     50                "\t\t -S\t\t generate snort signature\n" 
    4951                "\t\t -v\t\t be verbose (can be used multiple times)\n" 
    5052                "\t\t\t\t [files ...]\n", 
     
    5658int main(int argc, char *argv[]) { 
    5759        int             i, acnt; 
     60        enum sig_type   sigtype; 
    5861        lchar           *content; 
    5962        DIR             *dirp; 
     
    6871        lchar           *strlist; 
    6972        ssize_t         min_sstr_len; 
     73        double          min_sstr_ent; 
    7074 
    7175        lca             = NULL; 
     
    8690 
    8791        min_sstr_len    = 0; 
     92        min_sstr_ent    = 0; 
    8893        num_of_files    = 0; 
    8994        acnt            = 0; 
    9095        i               = 0; 
    9196 
     97        sigtype         = SIG_RAW; 
     98 
    9299 
    93100        // process args 
    94         while((option = getopt(argc, argv, "cd:ghlm:v?")) > 0) { 
     101        while((option = getopt(argc, argv, "cd:e:ghlm:Sv?")) > 0) { 
    95102                switch(option) { 
    96103                        case 'c': 
     
    108115                                } 
    109116                                break; 
     117                        case 'e': 
     118                                if ((min_sstr_ent = atof(optarg)) < 0) { 
     119                                        fprintf(stderr, "Error - The minimum entropy must not be negative.\n"); 
     120                                        exit(EXIT_FAILURE); 
     121                                } 
     122                                break; 
    110123                        case 'g': 
    111124                                print_gst = 1; 
     
    116129                        case 'm': 
    117130                                min_sstr_len = strtoul(optarg, NULL, 0); 
     131                                break; 
     132                        case 'S': 
     133                                sigtype = SIG_SNORT; 
    118134                                break; 
    119135                        case 'v': 
     
    266282 
    267283        if (verbose) printf("Extracting common substrings with length >= %u.\n", (unsigned int) min_sstr_len); 
    268         if (cstr_list.len && print_sslist) for (i=cstr_list.len; i && cstr_list.elem[i-1].len >= min_sstr_len; i--) 
    269                 list_substrings(gst, cstr_list.elem[i-1].n, cstr_list.elem[i-1].len); 
     284        if (cstr_list.len && print_sslist) for (i = 0; i < cstr_list.len && cstr_list.elem[i].len >= min_sstr_len; i++) 
     285                list_substrings(gst, cstr_list.elem[i].n, cstr_list.elem[i].len); 
     286 
     287        build_sig(gst, cstr_list, leaves, num_leaves, min_sstr_len, min_sstr_ent, sigtype); 
    270288 
    271289 
  • nebula/trunk/gst/gst.h

    r1546 r1553  
    3636u_int32_t       *string_offset; 
    3737 
     38enum sig_type { 
     39        SIG_RAW, 
     40        SIG_SNORT 
     41} sigtype; 
     42 
    3843#endif 
  • nebula/trunk/gst/stree.c

    r1547 r1553  
    656656                        if (!lca->flag) { 
    657657                                num_cstr++; 
    658                                 substr_add(cstr_list, lca, get_node_label_end(t, lca)-lca->path_position+1); 
     658                                substr_add(cstr_list, lca, left, i, get_node_label_end(t, lca)-lca->path_position+1); 
    659659                        } 
    660660 
  • nebula/trunk/gst/stree.h

    r1546 r1553  
    4242        u_int32_t               edge_label_start;       /* Start index of the incoming edge */ 
    4343        u_int32_t               edge_label_end;         /* End index of the incoming edge */ 
    44         u_int32_t               string_id; 
    45         u_int32_t               id; 
     44        u_int32_t               string_id;             // unique string terminator 
     45        u_int32_t               id;                    // id for lca computation 
    4646        u_char                  flag; 
    4747} stnode; 
     
    6161        ssize_t         len; 
    6262        stnode          *n; 
     63        ssize_t         l;      // left child node interval boundary 
     64        ssize_t         r;      // right child node interval boundary 
    6365} substr; 
    6466