📄 373.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center"> ● UNIX网络编程 (BM: clown) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="370.htm">上一层</a>][<a href="374.htm">下一篇</a>]
<hr><p align="left"><small>发信人: shuke (莫失莫忘), 信区: Security <br>
标 题: snort源码分析(2) <br>
发信站: BBS 水木清华站 (Sun Oct 8 11:40:44 2000) <br>
<br>
<br>
下面看看snort的整体结构。展开snort压缩包,有约50个c程序和头文件,另有 <br>
约30个其它文件(工程、数据或者说明文件)。[注:这里用的是snort-1.6-beta7。 <br>
snort-1.6.3不在手边,就用老一点的版本了,差别不大。]下面对源代码文件分组 <br>
说明。 <br>
<br>
snort.c(.h)是主程序所在的文件,实现了main函数和一系列辅助函数。 <br>
<br>
decode.c(.h)把数据包层层剥开,确定该包属于何种协议,有什么特征。并 <br>
标记到全局结构变量pv中。 <br>
<br>
log.c(.h)实现日志和报警功能。snort有多种日志格式,一种是按tcpdump <br>
二进制的格式存储,另一种按snort编码的ascii格式存储在日志目录下,日志目 <br>
录的名字根据"外"主机的ip地址命名。报警有不同的级别和方式,可以记录到 <br>
syslog中,或者记录到用户指定的文件,另外还可以通过unix socket发送报警 <br>
消息,以及利用SMB向Windows系统发送winpopup消息。 <br>
<br>
mstring.c(.h)实现字符串匹配算法。在snort中,采用的是Boyer-Moore算法。 <br>
算法书上一般都有。 <br>
<br>
plugbase.c(.h)实现了初始化检测以及登记检测规则的一组函数。snort中的 <br>
检测规则以链表的形式存储,每条规则通过登记(Register)过程添加到链表中。 <br>
<br>
response.c(.h)进行响应,即向攻击方主动发送数据包。这里实现了两种响应。 <br>
一种是发送ICMP的主机不可到达的假信息,另一种针对TCP,发送RST包,断开连接。 <br>
<br>
rule.c(.h)实现了规则设置和入侵检测所需要的函数。规则设置主要的作用是 <br>
把一个规则文件转化为实际运作中的规则链表。检测函数根据规则实施攻击特征的 <br>
检测。 <br>
<br>
sp_*_check.c(.h)是不同类型的检测规则的具体实现。很容易就可以从文件名 <br>
得知所实现的规则。例如,sp_dsize_check针对的是包的数据大小,sp_icmp_type <br>
_check针对icmp包的类型,sp_tcp_flag_check针对tcp包的标志位。不再详述。 <br>
<br>
spo_*.c(.h)实现输出(output)规则。spo_alert_syslog把事件记录到syslog <br>
中;spo_log_tcpdump利用libpcap中的日志函数,进行日志记录。 <br>
<br>
spp_*.c(.h)实现预处理(preprocess)规则。包括http解码(即把http请求中 <br>
的%XX这样的字符用对应的ascii字符代替,避免忽略了恶意的请求)、最小片断检 <br>
查(避免恶意利用tcp协议中重组的功能)和端口扫描检测。 <br>
<br>
-- <br>
<br>
垆边人似月,皓腕凝霜雪 <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="370.htm">上一层</a>][<a href="374.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -