libnids 相关

最近听过应用层的朋友用的是libnids库,因此大致看了一下。

1.libnids库完全是应用层的函数库,基本上没有内核相关的操作。

2.libnids底层收包用的是libpcap函数,几个主要的libpcap函数接口是:

   pcap_open_live(pcap_open_offline)  --> nids_init

   pcap_loop  --> nids_run

   pcap_next  --> nids_next

  pcap_dispatch --> nids_dispatch

3.报文处理回调函数封装为:

  nids_pcap_handler

4.libnids处理ip分片,tcp会话重组。libnids号称的稳定性据说是因为“代码拷贝自Linux内核,因此与内核协议栈有一样的稳定性”。

   TCP会话重组部分似乎比内核中的代码简单,可能是因为buffer处理部分比较简单。

//==================

5. 用户注册回调函数:

nids_register_ip_frag  (接收 未进行ip分片重组的原始报文)

nids_register_ip

nids_register_tcp

nids_register_udp

分别存储在:ip_frag_procs,ip_procs,tcp_procs,udp_procs的item指针中。

6.在ndis_init的时候,首先调用init_procs,

a.在ip_frag_procs中注册默认处理函数:gen_ip_frag_proc,调用ip_defrag_stub -->ip_defrag 进行ip分片重组。

b.在ip_procs中注册默认的处理函数:gen_ip_proc, gen_ip_proc函数根据报文类型处理tcp,dup,icmp包。

7.tcp会话重组,待续。

原文地址:https://www.cnblogs.com/yizhinantian/p/libnids.html