C++入侵检测与网络攻防之链表的使用以及UDP报文辨认

[复制链接]
发表于 2025-9-22 05:31:15 | 显示全部楼层 |阅读模式
目次

1.剩余报文辨认的编程思绪
2.容器选择的讨论
3.链表的计划理念
4.循环上相链表的实现
5.实现毗连的存储
6.复习
7.ssh剩余报文的辨认实现
8.UDP报文解析底子分析
9.SFTP下令的使用
10.TFTP服务的安装


1.剩余报文辨认的编程思绪



2.容器选择的讨论

1 ssh剩余报文的辨认
    如今只辨认了ssh版本协商的报文
    剩余的报文,只要是同一个毗连的,都标志位ssh报文
    1 怎样判定一个报文是不是同一个毗连
        毗连怎样标识
        (源&目标)ip+端口
        typedef struct dpi_tcp_connetion
        {
            uint32_t src_ip;
            uint16_t src_port;
            uint32_t dst_ip;
            uint16_t dst_port;
            dpi_protocol protocol;    //该链接对应的协议是什么协议
        }dpi_tcp_connection;

3.链表的计划理念

  2 怎样查找之前已经被标识的毗连
        将这些已经被标识的毗连存到一个容器里边
        下次拿到一个TCP报文的时间,先从这个容器看一下是不是从前的已经被标识的毗连
        如果是:
            直接判定该报文是什么协议的报文
        否:
            继续走从前的逻辑,一个一个协议分析的函数举行报文分析
            分析出是某个协议的报文
            添加一份毗连信息到 链表中

4.循环上相链表的实现

 容器怎样选择:
        C++:
            vector
                原理:将数据存储到一个连续的内存空间中 ,跟平常数组是差不多
                上风:
                    随机访问    O(1)
                劣势:
                    如果前面的数据举行增删,后边的数据都要移动
            list  链表
                原理:将多个独立的内存单元通过指针的情势逻辑上毗连在一起
                上风:
                    前面数据插入删除不会影响到后面的数据  , O(1)
                劣势:
                    随机访问服从低,跳到第N个节点  , O(n)

            set/multiset  
                原理:使用树来存,排序树
                上风:
                    自动排序
                    查找性能
                劣势:
                    不能随机访问
                    增加删除数据 盘算性能不高 

            抱负的容器是set
    退一步使用list,方便编程
    末了计划和实现一个带哨兵节点的双向循环链表,由于带哨兵节点比不带哨兵节点的链表操作方便

5.实现毗连的存储

2 链表的实现
    节点的定义:
    typedef struct dpi_list_node
    {
        void *data;             //泛化,能够存储任何类型数据的指针
        struct dpi_list_node *prev;
        struct dpi_list_node *next;
    }dpi_list_node;
    链表的定义:
    typedef struct dpi_list
    {
        uint32_t size;      //链表当前长度
        dpi_list_node sentinal;     //哨兵节点,肯定存在,链表的起始位置
    }dpi_list;

6.复习

   接口定义:
        1 初始化
            dpi_list *dpi_list_create();    //创建一个链表
                成功返回链表的指针
                失败返回NULL
        2 业务处置处罚
            int dpi_list_append(dpi_list *list , void *data);
                list:往哪个链表追加数据
                data: 追加数据的具体指针(该指针内存必须是堆上分配)
                返回值:
                    成功0
                    失败非0

7.ssh剩余报文的辨认实现

    3 垃圾接纳
            void dpi_list_destroy(dpi_list *list)
                开释整个链表,包罗每个节点以及数据
4 ssh剩余报文辨认的总结
    
    1 辨认一个毗连是什么协议的毗连
        通过三次握手毗连开始之后前面一两个报文能够确定
        将该毗连的信息存储起来,存到一个便于查找和遍历的容器中

    2 剩余报文的分析
        该报文的毗连是已经被辨认出是某个特定协议的就不需要再次辨认单个报文
        遍历之前的容器,确定当前报文是之前的某个毗连的报文
        毗连的匹对要留意数据传输的方向

8.UDP报文解析底子分析

    3 垃圾接纳
            void dpi_list_destroy(dpi_list *list)
                开释整个链表,包罗每个节点以及数据
4 ssh剩余报文辨认的总结
    
    1 辨认一个毗连是什么协议的毗连
        通过三次握手毗连开始之后前面一两个报文能够确定
        将该毗连的信息存储起来,存到一个便于查找和遍历的容器中

    2 剩余报文的分析
        该报文的毗连是已经被辨认出是某个特定协议的就不需要再次辨认单个报文
        遍历之前的容器,确定当前报文是之前的某个毗连的报文
        毗连的匹对要留意数据传输的方向

9.SFTP下令的使用

6 tftp的安装
    sudo apt-get install tftpd-hpa
    itcast@itcast-teacher:~$ sudo vi /etc/default/tftpd-hpa 
    TFTP_USERNAME="itcast"                使用什么用户来跑tftp服务,修改为你当前使用的用户 是 itcast照旧root
    TFTP_DIRECTORY="/home/itcast/tftp/"   上传大概下载文件的时间将文件放到哪个目次,不像sftp能够cd修改目次,只能固定一个目次
    TFTP_ADDRESS=":69"                  服务绑定的所在,不需要修改,69端口
    TFTP_OPTIONS="-l -s -c"
            -l :以standalone/listen模式启动TFTP服务
            -c: 可创建新文件。默认情况下TFTP只答应覆盖原有文件而不能创建新文件
            -s : 改变TFTP启动的根目次,加了-s后,客户端使用TFTP时,不再需要输入指定目次,填写文件的文件路径,而是使用配置文件中写好的目次
    重启服务
    sudo /etc/init.d/tftpd-hpa restart

10.TFTP服务的安装





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表