Libnids開發包介紹

2021-05-11 00:04:12 字數 3781 閱讀 2639

libnids開發包介紹

libnids是乙個用於網路入侵檢測開發的專業程式設計介面,它使用了libpcap所以它具有捕獲資料報的功能。同時,libnids提供了tcp資料流重組功能,所以對於分析基於tcp協議的各種協議libnids都能勝任.libnids還提供了對ip分片進行重組的功能,以及埠掃瞄檢測和異常資料報檢測功能。

libnids資料結構

一.基本常量

1.報警型別

enum

nids_warn_ip =1,  //ip資料報異常

nids_warn_tcp,//tcp資料報異常

nids_warn_udp,//udp資料報異常

nids_warn_scan//表示有掃瞄攻擊發生

enum

nids_warn_undefined=0, //表示未定義

nids_warn_ip_oversized.//表示ip資料報超長

nids_warn_ip_invlist,//表示無效的碎片佇列

nids_warn_ip_overlap,//表示發生重疊

nids_warn_ip_hdr,//表示無效ip首部,ip資料報發生異常

nids_warn_ip_srr,//表示源路由ip資料報

nids_warn_tcp_toomuch,//表示tcp資料個數太多,因為在libnids中在同一時刻捕獲的tcp個數最大值為tcp連線引數的雜湊表長度3/4  

nids_warn_tcp_hdr,//表示無效tcp首部,tcp資料報發生異常

nids_warn_tcp_bigaqueue,//表示tcp接收的佇列資料過多

nids_warn_tcp_badflags//表示錯誤標記

2.libnids狀態

在對tcp資料流進行重組時,必須考慮到tcp的連線狀態,在libnids中為了方便開發而定義了6種libnids狀態(描述的是連線的邏輯狀態)

#define nids_just_est 1//表示tcp連線建立

#define nids_data 2  //表示接受資料的狀態

#define nids_close 3 //表示tcp連線正常關閉

#define nids_reset 4 //表示tcp連線被重置關閉

#define nids_timed_out 5 //表示由於超時tcp連線被關閉

#define nids_exiting 6  //表示libnids正在退出

真正的tcp連線狀態有11種

enum

#define nids_do_chksum 0  //表示告訴libnids要計算校驗和

#define nids_dont_chksum 1//表示告訴libnids不需要計算校驗和

二。資料結構

1.tuple4:此資料結構是libnids中最基本的一種資料結構

struct tuple4

;//用於描述乙個位址埠對,它表示傳送方ip和埠以及接收方ip和埠

2.half_stream:此資料結構用來描述在tcp連線中一端的所有資訊,可以使客戶端也可以是服務端。

struct half_stream

3.tcp_stream:描述的是乙個tcp連線的所有資訊

struct tcp_stream

;//描述了乙個tcp連線的完整資訊

4.nids_prm:描述libnids的一些全域性引數資訊

struct nids_prm

;在libnids中用nids_prm資料結構定義了乙個全域性變數nids_params,其定義和初始值如下:

struct nids_prm nids_params=在使用libnids開發程式時,可以首先對nids_params全域性變數的值進行修改,這樣對整個libnids就全部有效

5.nids_chksum_ctl:描述的是計算校驗和

struct nids_chksum_ctl

三.libnids函式

1.基本函式

(1)int  nids_init(void);//對libnids進行初始化

(2)void nids_run(void);//執行libnids,進入迴圈捕獲資料報狀態.

(3)int nids_getfd(void);//獲得檔案描述號

(4)int nids_dispatch(int cnt)//功能是呼叫libpcap中的捕獲資料報函式pcap_dispatch().

(5)int nids_next(void)//呼叫libpcap中的捕獲資料報函式pcap_next()

(6)void nids_register_chksum_ctl(struct nids_chksum_ctl *ptr,int nr)//決定是否計算校驗和,它是根據資料結構nids_chksum_ctl中的action進行決定的

2.ip碎片函式

(1)void nids_register_ip_frag(void(*))//此函式的功能是註冊乙個能夠檢測所有ip資料報的**函式,包括ip碎片

eg:nids_register_ip_frag(ip_frag_function);

這樣就定義了乙個**函式ip_frag_function的定義型別如下:

void ip_frag_function(struct ip *a_packet,int len)

(2)void nids_register_ip(void(*))//此函式定義乙個**函式,此**函式可以接受正常的ip資料報,eg:

nids_register_ip(ip_function);

此**函式的定義型別如下:

void ip_function(struct ip * a_packet)

3.tcp資料流重組函式

(1)void nids_register_tcp(void(*))

**函式的功能是註冊乙個tcp連線的**函式,**函式的型別定義如下:

void tcp_callback(struct tcp_stream *ns,void **param);

其中引數ns表示乙個tcp連線的所有資訊,它的型別是tcp_stream資料結構;引數param表示要傳遞的連線引數資訊,可以指向乙個tcp連線的私有資料

(2)void nids_killtcp(struct tcp_stream * a_tcp)//此函式功能是終止tcp連線

(3)void nids_discard(struct tcp_stream *a_tcp,int num)//丟棄num位元組tcp資料,用於儲存更多的資料

4.udp註冊函式

(1)void nids_register_udp(void(*));

此函式的功能註冊乙個分析udp協議的**函式,**函式的型別定義如下:

void udp_callback(struct tuple4 *addr,char *buf,int len,struct ip * iph);

其中引數addr表示的是埠的資訊,引數buf表示udp協議負載資料內容,引數len 表示udp負載資料的長度;引數iph表示乙個ip資料報,包括ip首部,udp首部以及udp負載內容

利用libnids開發的流程

用函式nids_init()進行初始化。

然後註冊相應的**函式。不同的**函式實現不同的功能

最後利用函式nids_run()進入迴圈捕獲資料報的狀態。

Mac OS執行緒開發包介紹

mac os 執行緒開發包介紹 mac os x 提供了到幾套 api用於建立程式級別的執行緒。從行為上來看,這些 api建立的執行緒的本質是一樣的。你可以根據你的程式 carbon,cocoa,darwin 選擇一套 api函式,同時也要考慮它的效能和複雜度。舉個例子,cocoa 執行緒使用比較簡...

Detour開發包介紹 2 使用

一般來說,使用detours 的 都具有固定的模式。detours 1.5 和 detours 2.1 的介面函式變了很多,這裡按照 2.1 版本對基本的使用方法進行說明。常用的函式有下面幾個 detourtransactionbegin 開始一次 截獲 或者 解除截獲 過程。detourupdat...

Detour開發包介紹 2 使用

一般來說,使用detours的 都具有固定的模式。detours 1.5和detours 2.1的介面函式變了很多,這裡按照2.1版本對基本的使用方法進行說明。常用的函式有下面幾個 detourtransactionbegin 開始一次 截獲或者 解除截獲 過程。detourupdatethread...