IP各域的含义如下:
版本:当前IP协议的版本号,本文档采用的版本号为4;
首部长度:以32bit为单位的包头长度;
服务类型:规定对本数据报的处理方式,比如优先权等;
总长:以Byte为单位的整个IP数据报长度;
标识:信源主机赋予每个IP数据报的唯一标识符号,用于控制分片及其重组;
标志和片偏移:同样用于控制分片及其重组;
生存时间:设置本数据报的最大生存时间,以秒为单位;
协议:表示创建本IP数据报数据区数据的高层协议的类型,如TCP,UDP等;
头标校验和:用于保证头标数据的完整性;
源IP地址和目的IP地址: 分别指发送本数据报的主机IP地址和接受本数据报的主机的IP地址;
选项:用于控制和测试,是IP数据报中可选的部分,包含“源路径”、“路径记录”、“时间戳”等几种类型。
TCP协议是网络中应用最为广泛的协议,许多的应用层协议都是在建立在TCP协议之上的。
TCP协议头部信息如下:
源端口:发送端TCP端口号;
目的端口:接收端TCP端口号;
序号:指出段中数据在发送端数据流中的位置;
确认号:指出本机希望下一个接收的字节的序号;
头标长度:以32bit为单位的段头标长度,针对变长的“选项”域设计的;
码位:指出段的目的与内容,不同的各码位置位有不同的含义;
窗口:用于通告接收端接收缓冲区的大小;
校验和:这是可选域,置0表示未选,全1表示校验和为伍;
紧急指针:当码位的URG置位时,指出紧急指针的序号;
UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。UDP数据报各域的意义与TCP段中相应的域相同。只有校验和有些不同,除UDP数据报本身外,它还覆盖一个附加的“伪头标”。这个伪头标来自于IP报头,包括:源IP地址、信宿IP地址、协议类型、UDP长度及填充域。
数据分析模块
本系统采用异常检测量化分析方法,把检测规则和属性以数值形式表示。在检测中,采用计数方法来描述用户和系统行为某种属性,这些计数值只能在一定范围内变化。例如:系统允许有限的不成功注册次数、一种特定类型的网络连接数、企图访问文件的次数、访问文件或目录次数和访问网络系统次数。这个数值检测以一个相对固定的时间间隔(例如1小时)来度量用户的行为。在本系统中,分析器对解析的数据包计算每一个包的异常值,一旦发现异常值越限,则认为发生了异常攻击,就将该包信息存入数据库中。异常值由用户的行为的历史情况来决定。基本思想是,一般情况下,同一个用户在一定时间内连接本机的端口数较少,如果这个连接数突然增大,这个地址的异常值就增高。应当说,这并不是网络人侵的严格定义,它只是反映出被检测的数据包的“异常”程度。例如因网络问题而使来自同一个IP地址的数据突然增多时,这种检测方法可能会认为对方有异常行为。
分析结果记录
用数据库记录异常数据包信息,用于以后的分析与检查。
报警处理模块
将数据库中的信息及时响应,确定入侵的类型并进行报警。
个人入侵检测系统的实现
系统的总体结构
PIDS总体设计如图5:
图5 PIDS总体设计
系统捕获网络中的数据包,解码IP、TCP、UDP的头部各字段的信息,然后对解码后的数据进行分析统计,并对其做出判断。
系统将入侵信息记录入数据库,并通过告警窗口显示。
数据包捕获模块实现
PIDS的数据包捕获是通过调用Winpcap中的动态库函数实现的。使用pcap_findalldevs函数获取网络设备链表。获取失败终止程序并打印出错误报告,成功就打印出所有网络设备信息以供选择。在选择好进入的网络设备后,对该网络设备进行相应的配置,然后使用pcap_loop函数捕获数据包。
首先获得网卡信息:
/* 返回网络设备的链表,以供选择 */
if(pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}
/* 选择列表 */
for(d=alldevs; d; d=d->next)
{
printf("%d. %s\n", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
else
printf(" (No description available)\n");
}
if(i==0)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return -1;
}
printf("Enter the interface number (1-%d):",i);
scanf("%d", &inum);
接下来根据所选择的数据进入该网卡:
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
对选择的网卡进行
首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/10/10
免费个人入侵检测系统的实现(五)由毕业论文网(www.huoyuandh.com)会员上传。