首先要建立結構表,然後要想像建立一個Table資料表:
mac[6] , ipsrc ,counter ,*next
typedef struct ip_head{
u_char mac[6];
struct in_addr ipsrc;
int counter;
struct ip_head *next;
} NODE1;
NODE1 *pnew1;
pnew1=(NODE1 *)malloc(sizeof(NODE1));
我們要有Hash func.的分類概念,將IP分配到不同的位址,當碰到collision 時,則利用Link-list改善. 當有新的資料進來時,要用 over-head 的前插鍊結,此時要有一些資料結構的觀念:
void insert_head(struct in_addr ip_src,int src_num){
NODE1 *pnew1;
pnew1=(NODE1 *)malloc(sizeof(NODE1));
pnew1->ipsrc=ip_src;
pnew1->counter=1;
pnew1->next=pnew_head[src_num];
pnew_head[src_num]=pnew1; return;
}
等到這些作業完畢後,就要做排序工作,就像從小排到大,如此才能去做之後的分析
,而排序要建立新的一個鍊結串列,要將舊的Table 一一比較然後往前插,或往後插入,其中會遇到一些資料結構的問題.在此提出:
此鍊結指標要有四個:
pnew_head : 永遠指著頭 Head
pnew : 暫存資料的buffer 指標
pnew_tail1 : 目前這結指標所指的地方
pnew_tail2: 指著 pnew_tail1 的下一個鍊結串列
-----------------------------
20080504 tcap9.c modify sniffex.c
沒有留言:
張貼留言