第6章 Libnet和Libnids编程技术.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:24 大小:98KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

第6章 Libnet和Libnids编程技术.ppt

第6章Libnet和Libnids编程技术.ppt

预览

免费试读已结束,剩余 14 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第六章Libnet和Libnids编程技术内容一、LibnetLibnet的主要特点:高层接口可移植性数据报构造数据报的处理数据报发送Libnet库提供的接口函数包含15种数据包生成器和两种数据包发送器(IP层和数据链路层)。提供的接口函数包括:内存管理(分配和释放)函数地址解析函数各种协议类型的数据包构造函数数据包发送函数(IP层和链路层)一些辅助函数,如产生随机数、错误报告、端口列表管理等Libnet函数1、内存管理函数2、地址解析函数3、数据包构造函数4、数据包发送函数5、相关支持函数6、数据常量ARP协议数据包构造ARP协议数据包IP协议数据包构造IP协议数据包TCP协议数据包构造TCP协议数据包Libnet的使用网络接口初始化数据包内存初始化构造所需的数据包计算数据包的校验和发送数据包关闭网络接口释放数据包内存Libnet的安装二、LibnidsIP分片数据包为了使Libnids能接收所有的IP数据包,需要定义如下的回调函数:voidip_frag_func(structip*a_packet)在调用nids_init()函数初始化后,使用nids的函数进行注册:nids_register_ip_frag(ip_frag_func)这样回调函数ip_frag_func会在适当的时候由Libnids调用,参数a_packet指针将指向接收到的数据报。TCP数据流重组要接收TCP流交换的数据,必须定义如下回调函数:voidtcp_callback(structtcp_stream*ns,void**param)tcp_stream结构提供了一个TCP连接的所有信息。tcp_stream结构有一个名为nids_state的字段,此字段的数值将决定tcp_callback的操作。NIDS_JUST_EST//表示tcp连接建立NIDS_DATA//表示接收数据的状态NIDS_CLOSE//表示tcp连接正常关闭NIDS_RESET//表示tcp连接被重置关闭NIDS_TIMED_OUT//表示由于超时tcp连接被关闭NIDS_EXITING//表示libnids正在退出Libnids的数据结构及函数1、数据结构Libnids库的所有数据结构及接口函数都在“nids.h”头文件中声明。structtuple4//TCP连接参数{//客户端和服务器端的端口号unsignedshortsource,dest;//客户端和服务器端的IP地址unsignedlongsaddr,daddr;};2、函数(1)基本函数intnids_init(void);//对Libnids进行初始化voidnids_run(void);//运行Libnids,进入循环捕获数据包状态intnids_getfd(void);//获得文件描述符intnids_next(void)//调用Libpcap中的pcap_next()(2)IP数据包函数voidnids_register_ip_frag(void(*));//注册一个能够检测所有IP数据包的回调函数voidnids_register_ip(void(*));//定义一个回调函数,用来接收正常的IP数据包(3)TCP数据流重组函数voidnids_register_tcp(void(*));//注册一个TCP连接的回调函数voidnids_killtcp(structtcp_stream*a_tcp);//终止TCP连接voidnids_discard(structtcp_stream*a_tcp,intnum);//丢弃num字节TCP数据(4)UDP注册函数voidnids_register_udp(void(*));//注册一个分析UDP协议的回调函数,回调函数的类型定义如下:voidudp_callback(structtuple4*addr,char*buf,intlen,structip*iph);其中参数addr表示端口信息,参数buf表示UDP协议负载数据内容,参数len表示UDP负载数据长度,参数iph表示一个IP数据包。利用Libnids开发的流程用函数nids_init()进行初始化;然后注册相应的回调函数,不同的回调函数实现不同的功能;最后利用函数nids_run()进入循环捕获数据包的状态。