libnids開發包介紹
libnids是乙個用於網路入侵檢測開發的專業程式設計介面,它使用了libpcap所以它具有捕獲資料報的功能。同時,libnids提供了tcp資料流重組功能,所以對於分析基於tcp協議的各種協議libnids都能勝任.libnids還提供了對ip分片進行重組的功能,以及埠掃瞄檢測和異常資料報檢測功能。
libnids資料結構
一.基本常量
1.報警型別
enumenumnids_warn_ip =1, //ip資料報異常
nids_warn_tcp,//tcp資料報異常
nids_warn_udp,//udp資料報異常
nids_warn_scan//表示有掃瞄攻擊發生
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.ip碎片函式(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進行決定的
(1)void nids_register_ip_frag(void(*))//此函式的功能是註冊乙個能夠檢測所有ip資料報的**函式,包括ip碎片3.tcp資料流重組函式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)
(1)void nids_register_tcp(void(*))4.udp註冊函式**函式的功能是註冊乙個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資料,用於儲存更多的資料
(1)void nids_register_udp(void(*));利用libnids開發的流程此函式的功能註冊乙個分析udp協議的**函式,**函式的型別定義如下:
void udp_callback(struct tuple4 *addr,char *buf,int len,struct ip * iph);
其中引數addr表示的是埠的資訊,引數buf表示udp協議負載資料內容,引數len 表示udp負載資料的長度;引數iph表示乙個ip資料報,包括ip首部,udp首部以及udp負載內容
用函式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...