??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品美女,2014亚洲精品,久久久男人天堂http://www.aygfsteel.com/19851985lili/category/22482.html☜GivE mE HapPy ? zh-cnWed, 16 May 2007 10:30:10 GMTWed, 16 May 2007 10:30:10 GMT60|络嗅探软g的设计与分析http://www.aygfsteel.com/19851985lili/articles/117824.html☜♥☞MengChuChen☜♥☞MengChuChenWed, 16 May 2007 05:53:00 GMThttp://www.aygfsteel.com/19851985lili/articles/117824.htmlhttp://www.aygfsteel.com/19851985lili/comments/117824.htmlhttp://www.aygfsteel.com/19851985lili/articles/117824.html#Feedback0http://www.aygfsteel.com/19851985lili/comments/commentRss/117824.htmlhttp://www.aygfsteel.com/19851985lili/services/trackbacks/117824.html ??/span> 本文介绍了网l嗅探器软g的功能,以及|络嗅探软g设计的原理,q以软g设计的模块化思想Z介绍了编写一个网l嗅探Y件的M设计思想以及主要代码设计Q同时对涉及到的若干|络~程知识以及一些网l基本知识进行了介绍。本文的最后也指出了此|络嗅探软g设计的另一个发展方向?/span>

      关键? |络嗅探?/span> h模式  模块化设?/span>

1  ?/span> a

    随着|络技术的发展Q网l系l对于整个社会的工作和徏讑֏挥着来大的作用,|络环境也变得越来越复杂Q与此同时网l系l的安全问题也引起了我们的关注。设计数据包嗅探器的目的在于能够使系l管理员q用此类软g分析|络量以便更好地控制网l。它能够帮助pȝ理人员q速地扑ֈ问题症结所在(如网l瓶颈、错误配|等Q,它们通常被用来在|\上截?/span>/阅读位于OSI 协议模型中各个协议层ơ上的数据包?/span> 

2 |络嗅探软g的设计原?/span> 

嗅探器可以理解ؓ一个安装在计算Z的窃听设备,它可以用来窃听计机在网l上所产生的众多的信息Q可以窃听计机E序在网l上发送和接收到的数据Q用来接收在|络上传输的信息?/span>

很多计算机网l采用的?/span>׃n媒体"。也是_不必中断他的通讯Qƈ且配|特别的U\Q再安装嗅探器,几乎可以在Q何连接着的网l上直接H听到同一掩码范围内的计算机网l数据。这U窃听方式ؓZh模式的嗅?/span>Q?/span>promiscuous modeQ?/span>

2.1 以太|的工作原理

以太|的数据传输是基?/span>׃n原理的:所有的同一本地|范围内的计机共同接收到相同的数据包。这意味着计算机直接的通讯都是透明可见的。正是因L原因Q以太网卡都构造了g?/span>qo?/span>”,q个qo器将忽略掉一切和自己无关的网l信息。事实上是忽略掉了与自nMAC地址不符合的信息。嗅探程序正是利用了q个特点Q它把网卡设|ؓh模式。因此,嗅探E序p够接收到整个以太|内的网l数据信息了?/span> 

在以太网中所有的通讯都是q播的,也就是说通常在同一个网D늚所有网l接口都可以讉K在物理媒体上传输的所有数据,而每一个网l接口都有一个唯一的硬件地址Q这个硬件地址也就是网卡的MAC地址。大多数pȝ使用48比特的地址Q这个地址用来表示

|络中的每一个设备。一般来说每一块网卡上?/span>MAC地址都是不同的,每个|卡厂家得到一D地址Q然后用q段地址分配l其生的每个网卡一个地址。在g地址?/span>IP地址间?/span>ARP?/span>RARP协议q行怺转换?/span>

在正常的情况下,一个网l接口应该只响应q样的两U数据Q?/span>

?/span> 与自q件地址相匹配的数据帧?/span>

?/span> 发向所有机器的q播数据帧?/span>

2.2 |卡的工作原?/span>

在一个实际的pȝ中,数据的收发是q卡来完成的。网卡接收到传输来的数据Q网卡内的单片程序接收数据的目?/span>MAC地址。根据计机上的|卡驱动E序讄的接收模式判断该不该接收。认接收接收后产生中断信号通知CPUQ认Z该接收就丢掉不管。所以不该接收的数据Q网卡就截断了,计算机根本就不知道?/span>CPU得到中断信号产生中断Q操作系l就Ҏ(gu)|卡的驱动程序设|的|卡中断E序地址调用驱动E序接收数据Q驱动程序接收数据后攑օ信号堆栈让操作系l处理?/span>

对于|卡一般有四种接收模式Q?/span>

?/span> q播方式Q该模式下的|卡能够接收|络中的q播信息?/span>

?/span> l播方式Q设|在该模式下的网卡能够接收组播数据?/span>

?/span> 直接方式Q在q种模式下,只有目的|卡才能接收该数据?/span>

?/span> h模式Q在q种模式下的|卡能够接收一切通过它的数据,而不该数据是否是传l它的?/span>

数据?/span>MAC

接口配置模式

产生中断Q通知CPU

产生中断Q通知CPU

    不处理,丢弃

本地接口g地址

q播地址

 

其他g地址

h模式

非؜合模?/span>

数据?/span>MAC

接口配置模式

产生中断Q通知CPU

产生中断Q通知CPU

    不处理,丢弃

数据?/span>

2.3 |络嗅探软g的工作原?/span>

Ҏ(gu)以上的介l,我们可以得出l论如下Q?/span>

首先Q在以太|中是基于广播方式传送数据的Q也是_所有的物理信号都要l过我的机器。再ơ,|卡可以|于一U模式叫h模式Q?/span>promiscuous modeQ,在这U模式下工作的网卡能够接收到一切通过它的数据Q而不实际上数据的目的地址是不是它。这是以下要介绍的网l嗅探Y件的工作的基本原理:让网卡接收一切它所能接收的数据?/span>

计算机直接所传送的数据Q事实上是大量的二进制数据。因?/span>, 一个网l窃听程序还必须也用特定的|络协议来分解嗅探到的数据,嗅探器也必能够识别出哪个协议对应于这个数据片断,只有q样才能够进行正的解码?/span>   

3 |络嗅探软g的设计实?/span>

    该网l嗅探Y件能够从|络上读取数据包q且解析数据包报文头中各字段的意义。能够分析数据以及所使用的协议的cd?/span>

3.1 |络嗅探软g的模块结?/span>

设计该网l嗅探Y件可分ؓ以下几个步骤Q?/span>

?/span> 创徏套接?/span>

?/span> 把网卡设|ؓh模式

?/span> 捕获数据?/span>

?/span> 分析数据?/span>

3.2 模块说明

⑴  该网l嗅探Y件主要是q用LINUX环境下的SOCKET~程。网l的SOCKET数据传输是一U特D的I/O, SOCKET也是一U文件描q符。该|络嗅探软g设计的目的是截获所有的数据包,卛_括所有的协议?/span>

SocketQ)函数的定义式如下Q?/span>

Sockfd = socket ( int family, int type, int protocol ) Q?/span>

W一个参数是地址cdQ如果选用AF UNIX, 是用于本Z不同q程之间q行通信Q而设?/span>AF INET 则是用于不同L之间的通信Q第二个参数?/span>socket的类型参敎ͼ主要?/span>4U参数类型如下:

① SOCK DRAMQ?/span>used for udp datagrams.

② SOCK STREAMQ?/span>used for tcp packets.

③ SOCK RAWQ?/span>used to bypass the transport layer and directly access the IP layer.

       ④ SOCK PACKETQ?/span>this is linux specific, it is similuar to sock raw except it accesses the DATA LINK layer.

W三个参数是协议参数Q指定程序用具体的协议?/span>

在此E序中ؓ截获包含所有协议的数据包,故在E序的开始就写语句:

Q?/span>define PROTO   htons Q?/span>0x0003Q?/span>/ *Ethernet code for all protol */

且在本程序中socketQ)函数的第二个参数选用sock packet?/span>

c套接字创建成功之后,可以选择|络接口q加以参数控制了。进入第二个模块Q设|网卡于h模式?/span>

在程序中有一个单独的自定义函数是用来网卡设|ؓh模式的。在q个模块中主要是调用?/span>ioctl 函数Q?/span>ioctl 函数是用来控制特D文件的底层讑֤参数的,q些Ҏ(gu)文g通常是终端、套接字和接口?/span>ioctl 函数的定义如下:

     ioctlQ?/span>sockQ?/span> SIOCGIFFLAGS, &ifr Q?/span>

     ioctlQ)函数中第一个参数是一个打开的原始套接字描述W?#8220;sock”Q第二个参数是所要执行的h操作。这里,h操作?#8220;SIOCGIFFLAGS”Q意思是获取接口“etho”的标记符。第三个参数是接口请求数据结构的地址指针Q该l构中包含了所要进行请求操作的接口名称倹{?/span>

⑶ |络接口讄为؜杂模式以后,接着可以接收数据包?/span>, q入捕获数据包的模块?/span>

   recvfrom ( if_eth_fd, &ep, sizeof (ep), 0, &dest, &dlen );

q个函数要做的就是接收数据,q把接收到的数据攑օbuffer中?/span>

⑗在成功的接收到数据包后,E序进入下一个模块:分析数据包?/span>

q里要介l一下有关的|络基本知识Q首先介l一?/span>TCP/IP的分层:

?/span>TCP/IP协议族中Q有很多U协议。可用图一单概?/span>TCP/IP协议族中不同层次的协议。如图所C,׃TCP?/span>UDP?/span>ICMP?/span>IGMP都要?/span>IP传送数据,因此IP必须在生成的IP首部中加入某U标识,以表明数据属于哪一层。ؓ此,IP在首部中存入一个长度ؓ8 bit的数据,UC协议域?/span>1表示?/span>ICMP协议Q?/span>2表示?/span>IGMP协议Q?/span>6表示?/span>TCP协议Q?/span>17表示?/span>UDP协议。类似地Q许多应用程序都可以使用TCP?/span>UDP来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识W?/span>TCP?/span>UDP都用一?/span>16 bit的端口号来表CZ同的应用E序?/span>TCP?/span>UDP把源端口号和目的端口号分别存入报文首部中。网l接口分别要发送和接收IP?/span>ARP?/span>RARP数据Q因此也必须在以太网的首部中加入某UŞ式的标识Q以指明生成数据的网l层协议。ؓ此,以太|的帧首部也有一?/span>16 bit的cd域?/span>

 

 

TCP                       

UDP

ICMP

IP

IGMP

ARP

g接口

RARP

用户q程        用户q程        用户q程        用户q程      应用?/span>    q输?|络?/span>   链\?/span>

   

                          媒体

Q图一Q?/span>

    |络嗅探E序在分析数据包q一阶段正是Ҏ(gu)了网l的工作原理Q在收到一个以太网数据帧时Q数据就开始从协议栈中由底向上升,同时L各层协议加上的报文首部。每层协议盒都要L查报文首部中的协议标识,以确定接收数据的上层协议。这个过E即是分用?/span>

4 q一步的发展方向

     q有很多的功能可以加入到本文所设计的Y件中Q其变得更加完整。它的另一个发展的方向是q一步更好的分析数据包中的数据部分,q能够把分析出来的数据从ASCII码{换ؓ自然语言Q这p够给用户带来很大的方ѝ?/span>

 



]]>
վ֩ģ壺 | ˿| ˮ| ʯ| | | ξ| | ͺ| ѷ| | ӳ| ¡| | ̳| | ͨ| | ƺ| | ͨ| | | | Ͻ| | ɳ| ɽ| | ˮ| | ʯ| | | ˮ| | | ĵ| Ȩ| ̨| ͷ|