0506节网络信息被动获取与处理协议处理_第1页
0506节网络信息被动获取与处理协议处理_第2页
0506节网络信息被动获取与处理协议处理_第3页
0506节网络信息被动获取与处理协议处理_第4页
0506节网络信息被动获取与处理协议处理_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息内容平安王佰灵网络技术研究所哈尔滨工业大学(威海)技术Email:wbl@一、TCP/IP协议与以太网通讯二、Linux网络数据包监测技术

libpcap提供的接口函数实现和封装了与数据包截获有关的过程。三、Linux网络数据包组装与发送技术

libnet

提供的接口函数实现和封装了数据包的构造和发送过程。四、Linux网络数据流解析技术

libnids

提供的接口函数实现了开发网络入侵监测系统所必须的一些结构框架。课程内容四、Linux网络数据流解析技术4.4.1Libnids背景介绍4.4.2Libnids核心数据结构4.4.3Libnids关键函数4.4.4libnids中TCP协议检测4.4.5Libnids开发例如4.4.6Libnids升级换代4.4.1libnids背景介绍4.4.1libnids背景介绍-Libnids简介NetworkIntrusionDetectSystemlibrary,即网络入侵监测系统函数库。在libnet和libpcap的根底上开发的,封装了开发NIDS所需的许多通用型函数。linids提供的接口函数监视流经本地的所有网络通信,检查数据包等。除此之外,还具有重组TCP数据段、处理IP分片包和监测TCP端口扫描的功能。libnids支持Linux、Solaris和*BSD系统平台,目前最新版本为1.13。4.4.1libnids背景介绍-Libnids简介NIDS“E〞box(eventgenerationbox)UserlandTCP/IPstackBasedonLinux2.0.36IPstack4.4.1libnids背景介绍

-UserlandvsKernelKernelUserland4.4.1libnids背景介绍

-UserlandIPStackvsKernelIPStackKernelIPstackUserlandIPstackLibnidslibnids4.4.1libnids背景介绍-Libnids原理libpcapIP分片IP报文TCP报文UDP报文Userfunctionip_frag_callbackip_callbackudp_callbacktcp_callbacklibnetsend_pktkill_tcp4.4.1libnids背景介绍-回调函数libnids的每级回调函数可以是多个用户可以注册多个ip_callback用户可以注册多个tcp_callback用户可以注册多个udp_callbacklibnids的IP回调函数已经进行分片重组ip_callback回调函数中不会接收到IP分片4.4.2libnids数据结构介绍4.4.2-libnids主要数据结构1.tuple4:此数据结构是Libnids中最根本的一种数据结构功能描述:用于描述一个地址端口对,它表示发送方IP和端口以及接收方IP和端口structtuple4{ u_shortsource;//源端口 u_shortdest;//目标端口 u_intsaddr;//源IP u_intdaddr;//目的IP};4.4.2-libnids主要数据结构2.half_stream:此数据结构用来描述在tcp连接中一端的所有信息,可以使客户端也可以是效劳端。structhalf_stream{charstate;//表示套接字的状态charcollect;//表示是否保存数据charcollect_urg;//是否保存紧急数据char*data;//存储正常接收的数据intoffset;//存储在data中的偏移量intcount;//表示data中数据字节数intcount_new;//表示新数据大小intbufsize;intrmem_alloc;inturg_count;u_intacked;u_intseq;u_intack_seq;u_intfirst_data_seg;u_charurgdata;//用来存储紧急数据u_charcount_new_urg;//表示是否有新的紧急数据到达u_charurg_seen;u_inturg_ptr;u_shortwindow;u_charts_on;u_intcurr_ts;structskbuff*list;structskbuff*listtail;}4.4.2-libnids主要数据结构3.tcp_stream:描述的是一个TCP连接的所有信息structtcp_stream{structtuple4addr;//tcp连接四元组charnids_state;//逻辑连接状态structlurker_node*listeners;structhalf_streamclient;structhalf_streamserver;structtcp_stream*next_node;structtcp_stream*prev_node;inthash_index;structtcp_stream*next_time;structtcp_stream*prev_time;intread;structtcp_stream*next_free;};4.4.2-libnids主要数据结构4.nids_prm:描述libnids的一些全局参数信息structnids_prm{intn_tcp_streams;//tcp流哈西表大小intn_hosts;//ip碎片哈西表的大小char*device;char*filename;//已存储报文文件intsk_buff_size;intdev_addon;void(*syslog)();//函数指针,可以检测入侵攻击,如:网络扫描攻击函数定义类型为nids_syslog(inttype,interrnum,structip_header*iph,void*data)intsyslog_level;//表示日志等级intscan_num_hosts;//表示存储端口扫描信息的哈西表的大小intscan_delay;//表示在扫描检测中两端口扫描的间隔时间intscan_num_ports;//表示相同源地址必须扫描的tcp端口数目void(*no_mem)(char*);int(*ip_filter)();char*pcap_filter;intpromisc;intone_loop_less;intpcap_timeout;};4.4.3libnids函数介绍根本函数(1)intnids_init(void):对libnids进行初始化(2)voidnids_run(void):运行Libnids进入循环捕获数据包状态.(3)intnids_getfd(void):获得文件描述号(4)intnids_dispatch(intcnt): 功能是调用Libpcap中的捕获数据包函数pcap_dispatch().(5)intnids_next(void): 调用Libpcap中的捕获数据包函数pcap_next()(6)voidnids_register_chksum_ctl(structnids_chksum_ctl*ptr,intnr): 决定是否计算校验和,它是根据数据结构nids_chksum_ctl中的action进行决定的IP碎片函数(1)voidnids_register_ip_frag(void(*))此函数的功能是注册一个能够检测所有IP数据包的回调函数,包括IP碎片nids_register_ip_frag(ip_frag_function)这样就定义了一个回调函数ip_frag_function的定义类型如下:voidip_frag_function(structip*a_packet,intlen)(2)voidnids_register_ip(void(*))此函数定义一个回调函数,此回调函数可以接受正常的IP数据包nids_register_ip(ip_function)此回调函数的定义类型如下:voidip_function(structip*a_packet)UDP报文函数(1)voidnids_register_udp(void(*));此函数的功能注册一个分析UDP协议的回调函数,回调函数的类型定义如下:voidudp_callback(structtuple4*addr,char*buf,intlen,structip*iph);其中参数addr表示的是端口的信息,参数buf表示UDP协议负载数据内容,参数len表示UDP负载数据的长度;参数iph表示一个IP数据包,包括IP首部,UDP首部以及UDP负载内容TCP流函数(1)voidnids_register_tcp(void(*))回调函数的功能是注册一个TCP连接的回调函数回调函数的类型定义如下:voidtcp_callback(structtcp_stream*ns,void**param);其中参数ns表示一个tcp连接的所有信息,它的类型是tcp_stream数据结构;参数param表示要传递的连接参数信息,可以指向一个TCP连接的私有数据(2)voidnids_killtcp(structtcp_stream*a_tcp)//此函数功能是终止TCP连接(3)voidnids_discard(structtcp_stream*a_tcp,intnum)//丢弃num字节TCP数据,用于存储更多的数据Libnids开发流程Initializenids_init()Registercallbacksnids_register_tcp(tcp_callback)nids_regster_ip(ip_callback)nids_regiser_udp(udp_callback)Run!nids_run()React在tcp_callback中调用nids_kill_tcp()nids_run()UDPcallbackTCPcallbackIPcallbackTCPstreamobject:-TCPstate-clientdata-serverdata-sourceIP,port-destIP,port-seq,ack,etc…UDPpacket:-sourceIP,-sourceport-destIP-destport-UDPpayloadIPpacket-structIPpacket-containsupperlayers4.4.4libnids中TCP协议检测4.4.4TCP协议检测-tcp_callbacklibnids的工作TCP报文数据缓存客户-效劳器建立链接客户端->效劳器的数据效劳器->客户端的数据客户-效劳器链接终止TCP报文排序TCP状态管理用户回调接口4.4.4TCP协议检测-状态转换NIDS_JUST_ESTNIDS_DATANIDS_CLOSENIDS_RESET4.4.4TCP协议检测-状态转换NIDS_JUST_ESTNIDS_DATANIDS_CLOSENIDS_RESETNIDS_TIMED_OUTNIDS_EXITING4.4.4TCP协议检测-tcp_callbacktcp_callback(structtcp*s){ switch(s.state) { caseNIDS_JUST_EST:

whatcanwedohere? caseNIDS_DATA:

whatcanwedohere? caseNIDS_CLOSE:

whatcanwedohere? caseNIDS_RESET: caseNIDS_TIMED_OUT:

whatcanwedohere? }}4.4.4TCP协议检测-tcp_callbacktcp_callback(structtcp*stream){ switch(stream->state) { caseNIDS_JUST_EST:

whatcanwedohere? caseNIDS_DATA:

whatcanwedohere? caseNIDS_CLOSE: caseNIDS_RESET:

whatcanwedohere? caseNIDS_TIMED_OUT:

whatcanwedohere? }}新的TCP链接(3WHS)设置stream->{client,server}.collect=1某个TCP链接有新数据了根据stream结构体中相应字段判断某个TCP链接关闭了释放内存超时,无法继续跟踪该TCP释放内存4.4.5libnids开发例如4.4.5开发例如:jflowjflowPcaptoNetFlowv1summariesDaemonizesSendstoareceivinghostoverUDPLimitationsofjflowNotverylightweightInaccurateforsomethings:///~jose/software/jflow/4.4.5开发例如:jflow主函数<includes><exportrecord><ipcallback>intmain(intargc,char*argv[]){ <getopthandler> <UDPsocketconnect> nids_init(); nids_register_ip(monitor_ip); nids_run(); return(0);}voidmonitor_ip(structip*pkt){ structip_recordrec; inti;

rec.srcaddr=(u_int)(pkt->ip_src.s_addr); rec.dstaddr=(u_int)(pkt->ip_dst.s_addr); rec.nexthop=inet_addr(""); rec.dOctets=htonl(pkt->ip_len); rec.pad=0x0;

t=pkt->ip_p;

rec.tos=0x0; rec.tcp_flags=0x0; rec.pad_2=0x0; rec.pad_3=0x0; for(i=0;i<4;i++) rec.reserved[i]=0x0; export_ip_record(&rec); return;}4.4.5开发例如:jflow回调函数voidexport_ip_record(structip_record*rec){ time_tnow; /*fillouttheheader*/ now=time(NULL);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论