信息安全产品开发实践

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

利用libnids构建入侵检测系统(1)四川大学软件学院2009-09助教姓名QQ号邮箱罗云814314989cloudluo99@gmail.com王亮354185558legend115599@gmail.com王正霞593910963xiaxia_588@126.com李雯908441949win_lee19860830@sina.com3主要内容讲解Libnids的数据结构函数,并给出一些具体的例子,同学们在此基础上实现一个简单的协议分析程序或是一个简单的入侵检测系统4什么是libnidsLibnids是一个基于网络入侵检测开发的专业编程接口。我们利用Libnids可以实现:网络数据包的捕获;IP碎片重组、TCP流数据重组;入侵检测。5Libnids的安装安装Libnids必须要有Libpcap、Libnet库的支持,所以要想是试用Libnids必须按照Libpcap、Libnet与Libnids的顺序安装这三个软件包安装方法:1)下载源码包;2)释放归档文件;3)./configure;make;makeinstall6Libnids编程模型#include“nids.h”main(){applicationprivateprocessing,notrelatedtolibnidsoptionalmodificationoflibnidsparametersif(!nids_init())something'swrong,terminate;registrationofcallbackfunctionsnids_run();//notreachedinnormalsituation}7Libnids基本数据结构(1)TCP连接参数structtuple4{/*源端口和目的端口*/unsignedshortsource,dest;/*源地址与目的地址*/unsignedlongsaddr,daddr;};8Libnids基本数据结构(2)TCP连接单端信息structhalf_stream{用23个变量了描述TCP连接信息…………………….};9Libnids基本数据结构(3)Charstate;表示套接字的状态,如TCP_CLOSE、TCP_ESTABLISHED;charcollect;用来指示本端是否接收数据,0,将数据存放在data指向的字符缓冲区,0,忽略进入本端的数据;charcollect_urg;用于指示本端是否接受紧急数据;char*data;字符缓冲区,用于存放流向本端的数据intcount;用于指示连接建立后本端已经接受的字节数;10Libnids基本数据结构(4)intoffset:表示存储在data中数据的第一个字节的偏移量;intcount_new;用于指示是否有新数据到达本端,为0表示没有新数据charcount_new_urg;用于指示是否有新的紧急数据到达本端,为0表示没有新的数据11Libnids基本数据结构(5)TCP连接完整信息structtcp_stream{structtuple4addr;charnids_state;structhalf_streamclient,server;……};12Libnids基本数据结构(6)addr:用于表示一个TCP连接的四个重要信息;nids_state:表示连接的逻辑状态,共有六种状态:NIDS_JUST_ESTNIDS_CLOSENIDS_RESETNIDS_TIMED_OUTNIDS_EXITINGNIDS_DATA13Libnids基本数据结构(6)成员client表示客户端信息,成员server表示客户端信息。14Libnids库中常用函数(1)intnids_init(void)函数成功返回1,失败返回0函数功能:对libnids进行初始化,包括打开网络接口,打开文件,编译过滤规则、设置过滤规则、判断网络链路层信息15Libnids库中常用函数(2)Voidnids_run(void);此函数的功能是运行libnids,进入循环捕获数据包的状态,并将捕获的数据包交给注册的回调函数进行处理16Libnids库中常用函数(3)注册函数:针对IP、TCP、UDP协议分为三类注册函数IP注册函数voidnids_register_ip(void(*))注册一个可以处理IP数据包的函数,该函数的定义类型如下:voidip_function(structip*a_packet)其中a_packet表示的是所捕获的IP数据包17Libnids库中常用函数(4)TCP注册函数voidnids_register_tcp(void(*))回调函数的形式为:voidtcp_callback(structtcp_stream*ns,void**param)其中ns表示一个TCP全连接的所有信息,param表示要传递的参数,18Libnids库中常用函数(5)UDP注册函数voidnids_register_udp(void(*));回调函数的形式是voidudp_callback(structtuple4*addr,char*buf,intlen,structip*iph);addr用于表示接收与发送端的IP地址与端口,buf表示UDP协议负载数据的内容,参数len表示UDP负载数据的长度,IPH表示一个IP数据包,包括IP首部,UDP首部以及UDP负载19Libnids库中常用函数(6)Voidnids_killtcp(structtcp_stream*a_tcp)函数功能:终止TCP连接Voidnids_discard(structtcp_stream*a_tcp,intnum)函数的功能是丢弃num字节的TCP数据,用于存储更多的数据20试验阅读与理解libnids给出的例子程序sniff和printall(在sample目录),在此基础上,修改printall程序:1、在TCP进入其状态时,打印对应的状态信息;2、修改对应的打印语句,将非可打印字符以‘.’代替;课后要求:熟悉Libnids库中的数据结构与函数,为下节课的构造入侵检测系统作好准备。

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功