睡{4、Vo懿鞍4{1秘《:}{N0i。o(iY
Ve书≤编程窦狈网络懊糯器
≯
i
仍||参邵锐
摘
要本文给出了一种在Vj…l
c++下用原始套接宇来捕获并分析在网络上传输的数据包的简单方法。
关键词原始套接字,数据包,网络嗅探器
一、引言
从事网络安全的技术人员和相当部分准黑客(指那些使
用现成的黑客软什进jJ攻击而不是根据需要去自己编写代码的
人)都一定不会对网络嗅探器(sntffer)感到陌生,网络嗅探器尤
论是在网络安全还是在黑客攻击力面均扮演了很重要的角色一
通过使用网络嗅探器可以把网卡设置于混杂模式,并可实现对
网络上传输的数据包的捕获与分折一此分析结果可供网络安全
分析之用,但如为黑客所利用也可以为其发动进一步的攻击提
供有价值的信息。可虬,嗅探器实际足把双刃剑。虽然网络嗅
探器技术被黑客利用后会对网络安全构成一定的威胁,但嗅探
器本身的危害并不是很大,主要是用来为其他黑客软件提供网
络情报,真正的攻击主要是由其他黑软来完成的:而在网络安
全方面,网络嗅探手段可眦有救地探测在网络上传输的数据包
信息,通过对造些信息的分析利用是有助丁嘲络安争维护的.=
权衡利弊,有必要对网络嗅探器的实现原埋进行介绍。
二、嗅探器设计原理
嗅探器作为一种网络通讯稃序,也是通过埘刚卡的编程束
实现网络通讯的,对刚卡的编程也足使用通常的套接字
(socket)方式束进行。但是,通常的套接字程序只能响应与自己
硬件地址相匹配的或足以Jl播形式发出的数据帧,对于其他形
式的数据帧比如已到达网络接口但却不足发给此地址的数据
帧,网络接口在验证投递地址并非自身地址之后将不引起响应,
也就是醴应用程序无法收取到达的数据包。而删络嗅探器的目
的恰恰在于从网乍接收所自经过它的数据包,这些数据包既可
以是发给它的也可以是发往别处的显然,要达到此目的就不
能再让网卡接通常的正常模式I.作,而必须将其设置为混杂模
式。
具体到编程实现,.,这种对阿卡混杂模式的设置足通过原
始套接字(Raw
sockm)来实现的.这也有别于通常经常使用的
数据流套接字和数据报套接宁;在创建了原始套接宁后,需要
通过selsockopt()茵数来设置IP头操作选项,然后再通过b·nd()
函数将原始套接字绑定到本地网卡。为了让原始套接字能接受
所有的数据,还需要通过iucLlsocket()米进{,设置,而且还_J以
指定是否亲自处理『P头。至此,实际就可以阡始对阔络数据包
进行嗅撵了,对数据包的获取仍象流式套接字或数据报套接宁
那样通过喇v()甬数来完成一但是与艿他两利-套接字不同的是.
原始套接宁此时捕获到的数据包并不仅仅是单纯的数据信息,
而是包含有IP头、TcP头等信息头的最原始的数据信息,这些
信息保留了它在网络传输时的原貌。通过对这些在低层传输的
原始信息的分析可阻得到有关网络的·些信息。由于这些数据
经过了网络层和传输层的打包,因此需要根揣其附加的帧头对
数据包进行分析。下面先给出数据包的总体结构:
数据在从应用层到达传输层时,将添加TcP数据段头,或
是u)P数据段头。其中uDP数据段头比较简单,由一个8字节
的头和数据部分组成,具体格式如下:
16位
16位
源端r]
目的端LJ
uDP长度
uDP校验和
而TcP数据头则比较复杂,以2()个固定字节开始,在固
定头后面还可以有一些长度不同定的列选项,下而给{l{TcP数
据段头的格式组成:
16位 16位
源端口
目的端口
顺序号
确认号
T
U
A P R
S F
C
(保留)
P
7位
R
(:
S S
Y
I
窗口犬小
头
G K
H
T N N
长
校验和
紧急指针
可选项(0或更多的32位字)
数据(可选项)
万方数据