⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 374.htm

📁 unix高级编程原吗
💻 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="375.htm">下一篇</a>]
<hr><p align="left"><small>发信人: shuke (莫失莫忘), 信区: Security <br>

标  题: snort源码分析(3) <br>

发信站: BBS 水木清华站 (Sun Oct  8 15:51:03 2000) <br>

  <br>

  <br>

    下面描述main函数的工作流程。先来说明两个结构的定义。 <br>

  <br>

    在snort.h中,定义了两个结构:PV和PacketCount。PV用来记录命令行参数, <br>

snort根据这些命令行参数来确定其工作方式。PV类型的全局变量pv用来实际记录具体 <br>

工作方式。结构定义可以参看snort.h,在下边的main函数中,会多次遇到pv中各个域 <br>

的设定,到时再一个一个解释。 <br>

  <br>

    结构PacketCount用来统计流量,每处理一个数据包,该结构类型的全局变量pc <br>

把对应的域加1。相当于一个计数器。 <br>

  <br>

  <br>

    接下来解释main函数。 <br>

  <br>

    初始化设定一些缺省值;然后解析命令行参数,根据命令行参数,填充结构变 <br>

量pv;根据pv的值(也就是解析命令行的结果)确定工作方式,需要注意: <br>

  <br>

    如果是运行在Daemon方式,通过GoDaemon函数,创建守护进程,重定向标准输入 <br>

输出,实现daamon状态,并结束父进程。 <br>



  <br>

    snort可以实时采集网络数据,也可以从文件读取数据进行分析。这两种情况并 <br>

没有本质区别。如果是读取文件进行分析(并非直接从网卡实时采集来的),以该文 <br>

件名作为libpcap的函数OpenPcap的参数,打开采集过程;如果是从网卡实时采集, <br>

就把网卡接口作为OpenPcap的参数,利用libpcap的函数打开该网卡接口。在unix中, <br>

设备也被看作是文件,所以这和读取文件分析没有多大的差别。 <br>

  <br>

    接着,指定数据包的拆包函数。不同的数据链路网络,拆包的函数也不同。利用 <br>

函数SetPktProcessor,根据全局变量datalink的值,来设定不同的拆包函数。例如, <br>

以太网,拆包函数为DecodeEthPkt;令牌环网,拆包函数为DecodeTRPkt,等等。这些 <br>

Decode*函数,在decode.c中实现。 <br>

  <br>

    如果使用了检测规则,那么下面就要初始化这些检测规则,并解析规则文件,转 <br>

化成规则链表。规则有三大类:预处理(preprocessor),插件(plugin),输出插 <br>

件(outputplugin)。这里plugin就是具体的检测规则,而outputplugin是定义日志 <br>

和报警方式的规则。 <br>

  <br>

    然后根据报警模式,设定报警函数;根据日志模式,设定日志函数;如果指定了 <br>

能够进行响应,就打开raw socket,准备用于响应。 <br>

  <br>

    最后进入读取数据包的循环,pcap_loop对每个采集来的数据包都用ProcessPacket <br>

函数进行处理,如果出现错误或者到达指定的处理包数(pv.pkt_cnt定义),就退出 <br>



该函数。这里ProcessPacket是关键程序, <br>

  <br>

    最后,关闭采集过程。 <br>

  <br>

  <br>

-- <br>

  <br>

      垆边人似月,皓腕凝霜雪 <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="370.htm">上一层</a>][<a href="375.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 + -