zoukankan      html  css  js  c++  java
  • 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会话重组,待续。

  • 相关阅读:
    k8s-istio记录
    k8s
    单词 -(动物)
    RxJs
    .netcore 3.1 unbuntu
    单词规整
    AutoMapper
    时间
    ye
    特殊权限
  • 原文地址:https://www.cnblogs.com/yizhinantian/p/libnids.html
Copyright © 2011-2022 走看看