diff options
author | Campus <campus@ntop.org> | 2017-05-09 19:52:46 +0200 |
---|---|---|
committer | Campus <campus@ntop.org> | 2017-05-09 19:52:46 +0200 |
commit | e6dc092b732f746acbf37571c8a4a91cedd66544 (patch) | |
tree | f7a46a0a2ab4549b24fbe2f231515e0065a80c9d | |
parent | 21567e868642a3835491e8a5cf3650eee33b4d3c (diff) | |
parent | 5c1954012b282233a7d547a697e8c5c97d1455d8 (diff) |
Merge branch 'beratx-dev' into dev
-rw-r--r-- | example/ndpiReader.c | 102 |
1 files changed, 51 insertions, 51 deletions
diff --git a/example/ndpiReader.c b/example/ndpiReader.c index ac3d75e77..de31b0ab4 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -85,12 +85,12 @@ static time_t capture_until = 0; static u_int32_t num_flows; struct info_pair{ - u_int32_t addr; + char addr[48]; int count; }; typedef struct node_a{ - u_int32_t addr; + char addr[48]; int count; struct node_a *left, *right; }addr_node; @@ -781,28 +781,28 @@ static void node_proto_guess_walker(const void *node, ndpi_VISIT which, int dept } /* *********************************************** */ - -int updateIpTree(const u_int32_t key, addr_node **vrootp) { +int updateIpTree(const char *key, addr_node **vrootp) { addr_node *q; addr_node **rootp = vrootp; + int r; if(rootp == (addr_node **)0) return 0; while (*rootp != (addr_node *)0) { /* Knuth's T1: */ - if(key == ((*rootp)->addr)) { /* T2: */ + if((r = strcmp(key, ((*rootp)->addr))) == 0){ /* T2: */ return ++((*rootp)->count); } - rootp = (key < ((*rootp)->addr)) ? + rootp = (r < 0) ? &(*rootp)->left : /* T3: follow left branch */ &(*rootp)->right; /* T4: follow right branch */ } q = (addr_node *) malloc(sizeof(addr_node)); /* T5: key not found */ - if(q != (addr_node *)0) { /* make new node */ - *rootp = q; /* link new node to old */ - q->addr = key; /* initialize new node */ + if(q != (addr_node *)0) { /* make new node */ + *rootp = q; /* link new node to old */ + strncpy(q->addr, key, sizeof(q->addr)); /* initialize new node */ q->count = UPDATED_TREE; q->left = q->right = (addr_node *)0; return q->count; @@ -832,33 +832,33 @@ void freeIpTree(addr_node *root) { /* *********************************************** */ -void updateTopIpAddress(u_int32_t addr, int count, struct info_pair top[], int size){ +void updateTopIpAddress(const char *addr, int count, struct info_pair top[], int size){ int update = 0; + int r; int i; int min_i = 0; int min = count; + struct info_pair pair; if(count == 0) return; - struct info_pair pair; - pair.addr = addr, pair.count = count; + strncpy(pair.addr, addr, sizeof(pair.addr)); + pair.count = count; - /* if the same ip with a bigger - count just update it */ + for(i=0; i<size; i++) { - if(top[i].addr == addr) { + /* if the same ip with a bigger + count just update it */ + if((r = strcmp(top[i].addr, addr)) == 0) { top[i].count = count; return; - } - } - - /* if array is not full yet - add it to the first empty place */ - for(i=0; i<size; i++) { - if(top[i].addr != addr && top[i].count == 0) { - top[i] = pair; - return; - } + } + /* if array is not full yet + add it to the first empty place */ + if(top[i].count == 0) { + top[i] = pair; + return; + } } /* if bigger than the smallest one, replace it */ @@ -870,47 +870,49 @@ void updateTopIpAddress(u_int32_t addr, int count, struct info_pair top[], int s } } - if(update) + if(update){ top[min_i] = pair; + } } /* *********************************************** */ -static void updatePortStats(struct port_stats **stats, u_int32_t port, u_int32_t addr, u_int32_t num_pkts, u_int32_t num_bytes) { +static void updatePortStats(struct port_stats **stats, u_int32_t port, const char *addr, u_int32_t num_pkts, u_int32_t num_bytes) { struct port_stats *s; - char ipname[48]; - int count; + int count=0; HASH_FIND_INT(*stats, &port, s); if(s == NULL) { s = (struct port_stats*)malloc(sizeof(struct port_stats)); if(!s) return; - s->port = port, s->num_pkts = 0, s->num_bytes = 0; + s->port = port, s->num_pkts = num_pkts, s->num_bytes = num_bytes; s->num_addr = 1, s->cumulative_addr = 1; memset(s->top_ip_addrs, 0, MAX_NUM_IP_ADDRESS*sizeof(struct info_pair)); updateTopIpAddress(addr, 1, s->top_ip_addrs, MAX_NUM_IP_ADDRESS); - + s->addr_tree = (addr_node *) malloc(sizeof(addr_node)); if(!s->addr_tree) return; - s->addr_tree->addr = addr; + strncpy(s->addr_tree->addr, addr, sizeof(s->addr_tree->addr)); s->addr_tree->count = 1; s->addr_tree->left = NULL; s->addr_tree->right = NULL; HASH_ADD_INT(*stats, port, s); } + else{ + count = updateIpTree(addr, &(*s).addr_tree); + + if(count == UPDATED_TREE) s->num_addr++; + + if(count) { + s->cumulative_addr++; + updateTopIpAddress(addr, count, s->top_ip_addrs, MAX_NUM_IP_ADDRESS); + } - count = updateIpTree(addr, &(*s).addr_tree); - if(count == UPDATED_TREE) s->num_addr++; - - if(count) { - s->cumulative_addr++; - updateTopIpAddress(addr, count, s->top_ip_addrs, MAX_NUM_IP_ADDRESS); + s->num_pkts += num_pkts, s->num_bytes += num_bytes; } - - s->num_pkts += num_pkts, s->num_bytes += num_bytes; } /* *********************************************** */ @@ -934,15 +936,18 @@ static void deletePortsStats(struct port_stats *stats) { static void port_stats_walker(const void *node, ndpi_VISIT which, int depth, void *user_data) { struct ndpi_flow_info *flow = *(struct ndpi_flow_info **) node; u_int16_t sport, dport; - u_int32_t saddr, daddr; + char saddr[48]; + char daddr[48]; if(flow->src_to_dst_direction == 1) { sport = ntohs(flow->lower_port), dport = ntohs(flow->upper_port); - saddr = flow->lower_ip, daddr = flow->upper_ip; + strncpy(saddr, flow->lower_name, sizeof(saddr)); + strncpy(daddr, flow->upper_name, sizeof(daddr)); } else { sport = ntohs(flow->upper_port), dport = ntohs(flow->lower_port); - saddr = flow->upper_ip, daddr = flow->lower_ip; + strncpy(saddr, flow->upper_name, sizeof(saddr)); + strncpy(daddr, flow->lower_name, sizeof(daddr)); } updatePortStats(&srcStats, sport, saddr, flow->packets, flow->bytes); updatePortStats(&dstStats, dport, daddr, flow->packets, flow->bytes); @@ -1201,8 +1206,7 @@ static int info_pair_cmp (const void *_a, const void *_b) void printPortStats(struct port_stats *stats) { struct port_stats *s, *tmp; - char ip_name[48]; - int i = 0, j = 0, first = 1; + int i = 0, j = 0; HASH_ITER(hh, stats, s, tmp) { i++; @@ -1213,16 +1217,12 @@ void printPortStats(struct port_stats *stats) { for(j=0; j<MAX_NUM_IP_ADDRESS; j++) { if(s->top_ip_addrs[j].count != 0) { - inet_ntop(AF_INET, &s->top_ip_addrs[j].addr, ip_name, sizeof(ip_name)); - printf("\t\t%-16s ~ %.2f%%\n", - ip_name, ((s->top_ip_addrs[j].count) * 100.0) / s->cumulative_addr); - first = 0; + printf("\t\t%-36s ~ %.2f%%\n", s->top_ip_addrs[j].addr, + ((s->top_ip_addrs[j].count) * 100.0) / s->cumulative_addr); } } printf("\n"); - first = 1; - if(i >= 10) break; } } |