网络嗅探技术及相关软件的使用.docx
《网络嗅探技术及相关软件的使用.docx》由会员分享,可在线阅读,更多相关《网络嗅探技术及相关软件的使用.docx(13页珍藏版)》请在冰豆网上搜索。
![网络嗅探技术及相关软件的使用.docx](https://file1.bdocx.com/fileroot1/2022-11/30/303eab07-ea1e-4219-a229-4ed312f08553/303eab07-ea1e-4219-a229-4ed312f085531.gif)
网络嗅探技术及相关软件的使用
网络嗅探技术及相关软件的使用
前言:
本文所涉及内容,是在阅读朱畅华老师编写的《现代通信系统及网络测量》一书后了解到的,以前的本科学习中并没有涉及到,因此找到资料,对其中的基础理论进行了学习,并将所学到的内容进行整理,写出此文。
此外,试验所使用的操作系统为Windows7,与找到的sniffer软件资源不兼容,而使用的Ethereal软件(wireshark-win32-1.4.0)则无此问题,所以下文中将主要介绍ethereal软件的相关使用情况,仅对sniffer的界面进行介绍,并对两类软件的优缺点进行总结。
文章的最后附上了EtherApe的相关使用方法,由于未能找到与windows兼容的EtherApe软件,所以只附上一些图片。
嗅探器
嗅探器(Sniff),通过将本机以太网卡设置为“混杂模式”,直接获取任意连接到网络中的同一掩码范围内的网络数据,且不中断网络正常运行的一类程序。
该技术是建立在以太网“共享”技术之上的,所有的同一本地网范围内的计算机共同接收到相同的数据包,除目标主机外,其他主机会将该数据包过滤并将其丢弃。
目前,该技术有向“交换”技术转化的趋势,但是在当前一段时间内,这种技术会继续使用下去。
MAC地址
MAC(MediaAccessControl),用来区分以太网内“共享“数据流的主机身份,可以看做是网络中各主机,确切的说是以太网卡的身份证,是嗅探技术的硬件支持。
MAC地址是由一组6个16进制数组成的,共48比特,这48比特分为两个部分组成,前面的24比特用于表示以太网卡的寄主,后面的24比特是一组序列号,由寄主进行支派,从而保证网络中任何两块网卡的MAC地址都不相同。
这24比特中只有22比特被用于表示身份,另外两个,一个用来校验是否是广播或者多播地址,另一个比特用来分配本地执行地址。
当主机A、B间需要进行通信时,A会向网络中发送一个公共数据包询问B的MAC地址,该数据包中包括A的IP地址,MAC地址,响应端口号,B的IP地址,然后进入等待。
B收到该数据包后,会向A发送应答数据包,包括自己的IP地址,MAC地址,源MAC地址,源IP地址等,A接收到该数据包后,A、B就可以进行通信了。
此外,我们可以在命令状态行中输入:
"ipconfig/all"获取本机的MAC地址,还可以通过“arp–a”查看与本机相连的其他主机。
修改MAC地址
第一种方法,发送数据包的时,可以覆盖源始的MAC信息。
第二种方法,在网卡允许的一定的时间内修改内部的MAC地址。
第三种方法,重新烧录EEPROM。
这种方法要求特定的硬件设备和适用的芯片,而且这种方法将永远修改MAC地址。
反嗅探技术
为防止自己的数据被获取,反嗅探技术应运而生。
理论上,嗅探程序是不可能被检测出来的,因为该只会收集数据包,而不发送出任何数据,属于被动接受的一类程序,但是当它安装在一台正常的局域网内的计算机上的时候会产生一些数据流。
我们可以利用这一点反向检测网络中是否有嗅探程序。
ping方法:
很多的嗅探器程序,如果你发送一个请求给哪台有嗅探程序的机器,它将作出应答。
说明:
1.怀疑IP地址为10.0.0.1的机器装有嗅探程序,它的MAC地址确定为00-40-05-A4-79-32.
2.确保机器是在这个局域网中间。
3.现在修改MAC地址为00-40-05-A4-79-33.
4.现在用ping命令ping这个IP地址。
5.没有任何人能够看到发送的数据包,因为每台计算机的MAC地址无法与这个数据包中的目地MAC不符,所以,这个包应该会被丢弃。
6.如果你看到应答,说明该包未被丢弃,很有可能有嗅探器存在。
本机嗅探程序的检测
除了要防止本机所处网络中嗅探程序的侵入,还要防范网络黑客等专业人员在本机中植入嗅探程序。
本机嗅探的程序检测方法比较简单,只要检查一下网卡是否处于混杂模式就可以了,在Linux下,这个比较容易实现,而在Windows平台上,并没有现成的函数可供我们实现这个功能,以下为从网上获得的一个小技巧(未试验):
#include
#defineMAX_PACK_LEN65535
#defineMAX_HOSTNAME_LAN255
#pragmacomment(lib,"ws2_32.lib")
intmain()
{
SOCKETSockRaw,Sock;
WSADATAwsaData;
intret=0;
structsockaddr_insAddr,addr;
charRecvBuf[MAX_PACK_LEN];
charFARname[MAX_HOSTNAME_LAN];
structhostentFAR*pHostent;
char*Buf=(char*)malloc(128);
intsettimeout=1000;//这里我们设置了一秒钟超时
printf("UNSnifferforWin2kv1.0\nPowerbyBigBall\nHomePage:
http:
\/\/\/liumy\nEmail:
liumy@\nOicq:
9388920\n\nCheckingyoursystem,waitamomentplease...\n");
WSAStartup(MAKEWORD(2,2),&wsaData);//建立一条RawSocket
SockRaw=socket(AF_INET,SOCK_RAW,IPPROTO_IP);再建立一条
Sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
memset(&sAddr,0,sizeof(sAddr));
memset(&addr,0,sizeof(addr));
sAddr.sin_family=AF_INET;
sAddr.sin_port=htons(5257);
addr.sin_family=AF_INET;
addr.sin_port=htons(5258);//把IP地址指向本机
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
memset(RecvBuf,0,sizeof(RecvBuf));
pHostent=malloc(sizeof(structhostent));
gethostname(name,MAX_HOSTNAME_LAN);
pHostent=gethostbyname(name);//取得自己的IP地址
memcpy(&sAddr.sin_addr.S_un.S_addr,pHostent->h_addr_list[0],pHostent->h_length);
free(pHostent);//绑定一个本机的接收端口
bind(SockRaw,(structsockaddr*)&sAddr,sizeof(sAddr));
//虚连接到本机的一个未打开的端口
connect(Sock,(structsockaddr*)&addr,sizeof(addr));
Buf="1234567890!
@#$%^&*";//设置超时
setsockopt(SockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&settimeout,sizeof(int));//向虚连接端口发送一个数据包
send(Sock,Buf,strlen(Buf),0);//使用SockRaw接收这个数据包
ret=recv(SockRaw,RecvBuf,sizeof(RecvBuf),0);
if(ret==SOCKET_ERROR||ret==0)
printf("Nofoundanysnifferinyoursystem!
\n");
else
{//进行ChkSum
if(Buf=="1234567890!
@#$%^&*")
printf("Warning!
!
!
Foundsniffer!
!
!
\n");
}
closesocket(Sock);
closesocket(SockRaw);
free(pHostent);
free(Buf);
WSACleanup();
return0;
}
网络嗅探软件Ethereal的应用
Ethereal是一个图形用户接口(GUI)的网络嗅探器,可以用来从网络上获取数据包,并对数据包进行分析,而且界面简单,易于操作,如sniffer等,只是在设置过滤规则上稍有不同。
Ehtereal和Tcpdump都依赖于pcap库,因此两者在许多方面非常相似,在安装软件时需要首先安装WinPcap,然后安装ethereal软件包。
启动ethereal以后,首先需要对该软件进行设置,选择菜单Capature->Options,进入设置界面,如下图所示。
●Interface:
指定参与捕获数据包的网卡。
现在的笔记本上带有有线与无线两块网卡,而本次试验使用的是无线网卡,所以将后面的网卡选项设置为Microsoft\Device\NBF……(默认的为机器上的有线网卡);
●Capturepacketsinpromiscuousmode:
是否打开混杂模式。
如果打开,抓取所有的数据包;
●Limiteachpacket:
限制所抓包的大小,缺省情况不限制;
●Buffersize:
缓冲区队列长度;
●File:
所抓包的存储地址,可以在这里输入存储文件名;
●对于DisplayOptions以及NameResolution选项可根据自己习惯进行设置,一般选用默认设置。
设置Ethereal的过滤规则
此外,还应该为其设置相应的过滤规则。
Ethereal使用与Tcpdump相似的过滤规则,并且可以很方便地存储已设置好的过滤规则。
单击Edit->CaptureFilters...->EditCaptureFilterList对话框,如下图所示。
如上图所示,你既可以在已有的过滤规则中选择所需要的设置,也可以新建过滤规则,例如,要在主机10.1.197.162和间创建过滤器,可以在Filtername编辑框内输入过滤器名字sohu,在Filterstring编辑框内输入过滤规则host10.1.197.162and,然后单击New按钮,即可设置好新的过滤规则。
Ethereal使用的过滤规则和Tcpdump几乎完全一致,因为两者都基于pcap库,而且Ethereal可同时维护多个过滤器,网络管理员可以根据实际需要选用不同的过滤器。
当所有需要的过滤器都创建好后,单击OK按钮保存创建的过滤器,整个嗅探过程就开始了。
Ethereal可以实时显示截获的数据包,因此能够帮助网络管理员及时了解网络的运行状况,从而使其对网络性能和流量能有一个比较准确的把握。
我们也可以通过CaptureOptions->Filter:
按钮,然后选择要使用的过滤器。
Ethereal的显示过滤器
当抓取到足够的包时,停止抓包,此时显示的为抓取到的所有的数据包,如下图所示。
若想查看某类数据包,可以在窗口左上角的Fliter框中输入所要寻找的数据包的协议名称或两站点信息表达式,所要使用的表达式语言将在Ethereal的过滤规则介绍。
针对不同协议,Ethereal用不同的颜色对其进行区分。
当需要查看某个数据包的详细信息时,可在显示框的第一部分单击所要查看的数据包,在第二、第三部分分别显示该数据包的详细信息和数据的十六进制表示。
单击第二个框中的某一部分,会在第三个框中的通过反显,显示该类数据在数据包中所对应的十六进制表示。
Ethereal的过滤规则
Ethereal的过滤规则可以有两种形式:
(1)一个原语:
一个原语即一条最基本的过滤规则
(2)用“and”、“or”、“not”关系去处运算符,以及括号组合起来的原语。
其中“and”的含义是它所连接的两个原语必须都成立;“or”的含义是它所连接的两个原语只要有一个成立即可;“not”的含义是它后面跟的原语不成立;括号的作用是对关系运算顺序作出规定。
从上面的描述可以看出,我们只要掌握原语的写法,再用关系运算符把它们组合起来,就可以写出满足不同要求的过滤规则了。
Ethereal提供的原语非常多,这里只介绍最常用的四种(在下面的叙述中,“[]”表示可选项,“<>”表示必存在的项,“|”表示两者选择其中之一,其他字符串则是关键字,必须照写不误):
ether[src|dst]host
这条原语用来根据以太网MAC层的信息来进行包过滤。
若无可选项src|dst,这条原语用于捕获源和目的MAC地址之一是“mac_addr“的以太网帧;如果加上“src”或“dst”的限制,则分别用于捕获源或目的MAC地址是“mac_addr”的以太网帧。
如:
原语“etherhost08:
00:
1B:
D3:
D3:
61”的含义是捕获所有源或目的MAC地址是“08:
00:
1B:
D3:
D3:
61”的以太网帧。
原语“ethersrchost08:
00:
1B:
D3:
D3:
61”的含义是捕获所有源MAC地址是“08:
00:
1B:
D3:
D3:
61”的以太网帧。
2)[src|dst]host
这条原语用来根据IP信息进行包过滤。
若无可选“src|dst”,这条原语用于捕获源或目的IP地址之一是“ip_addr”的包;如果加上“src”或“dst”的限制,则分别用于捕获源或目的IP地址是“ip_addr”的包。
例如,原语“host210.30.97.53”的含义是捕获所有源或目的地址是“210.30.97.53”的包;原语“dsthost210.30.97.53”的含义是捕获所有目的地址是“210.30.97.53”的包
3)[tcp|udp][src|dst]port
这条原语是用来根据传输层进行包过滤。
它可以用于捕获传输层协议是TCP或UDP,源或目的端口号是number的包。
可选项“TCP”和“UDP”用于对传输层协议进行选择,可选项“src”和“dst”用来对端口号是源还是目的进行选择。
例如,原语“tcpport80”的含义是捕获所有源或目的端口号是80协议的包;原语“udpdstport53”的含义是捕获所有目的端口号是53的UDP协议的包。
4)arp|ip|icmp|udp|tcp等
这类原语用于捕获属于某种协议类型的包,协议的类型可以是“arp”、“ip”、“ICMP”、“UDP”或“TCP”等。
例如只含一个关键原语“ICMP”含义是捕获所有ICMP协议的包。
以上是介绍4种最常用的原语写法,下面通过举例说明如何把这些原语组合起来,从而构造比较复杂的过滤规则。
[例A-1]捕获主机192.168.0.10发出或收到的,除HTTP协议之外的网络包。
(注:
HTTP协议通常使用TCP端口号80)
过滤规则为:
host192.168.0.10andnottcpport80
[例A-2]记主机192.168.0.10为A,捕获A与主机192.168.0.20或A与主机192.168.0.30之间的网络包。
过滤规则为:
host192.168.0.10and(host192.168.0.20orhost192.168.0.30)
在Ethereal使用协议插件
Ethereal能够支持许多协议,但有些协议需要安装插件,比如H.323,所以对于H.323协议,首先要下载ethereal的H.323插件,然后将文件(h323.dll)解压到ethereal安装目录的plugin\0.9.x目录下面,并进行一下设置:
1)启动ethereal
2)菜单Edit->Preference
3)单击Protocols前面的"+"号,展开Protocols
4)找到Q931,并单击
5)确保"Desegment....TCPsegments"是选中的(即方框被按下去)
6)单击TCP
7)确保"Allow....TCPstreams"是选中的
8)确保没有选中"CheckTCPchecksum"和"Usesequencenumbers"
9)单击TPKT
10)确保"Desegment....TCPsegments"是选中的
11)点击Save,然后点击Apply,然后点击OK你也完全可以不断地重新安装新版本winpcap和ethreal,这样就可以不需在旧的ethreal的版本中安装新的插件来支持新的协议插件。
两类软件的优缺点
Ethereal软件是一个开放源码的网络分析系统,可以实时的从网络中获取数据包并将其进行分析、显示;由于采用了协议树加特征字的设计架构,使得它能够支持五百多种协议的解析;插件技术,使得设计者只需要关心自己设计开发的协议模块是否合理而不用关心与系统的结合。
不过,Ethereal仍然有一些需要改进的地方。
在协议识别方面Ethereal大多采用端口识别,有少量协议采用内容识别,这就让一些非标准端口的协议数据没有正确解析出来,例如ftp协议如果不是21端口的话,Ethereal就无法识别出来,只能作为tcp数据处理;另外对于内容识别式,Ethereal将所有内容识别的函数组成一张入口表,每次协议数据需要内容识别时,按字母顺序逐个调用表里的每个识别函数,无法做到流级别的识别。
此外,在对所捕获数据包的统计分析显示过程中,仅能通过较简单的坐标图或者列表显示不同类别所占比例,显示界面简单,不够人性化,需要通过Etheape来辅助显示。
与Ethereal相比,Sniffer在某些方面做得不错。
Sniffer拥有功能强大人工智能专家系统,能自动、实时监视网络,捕捉数据,识别网络配置,自动发现网络故障并进行告警并能指出故障发生的位置及性质。
Sniffer也能对网络中的400多种协议进行解码并可以在全部七层OSI协议上进行解码;对每一层都提供了Summary、Detail、Hex等几种解码窗口或进行强制解码;提供了在线实时解码分析和在线捕捉,将捕捉的数据存盘后进行解码分析二种功能;可以通过饼图、直方图等多种方式对所获取的数据包进行分类显示或拓扑显示,使结果清晰明了。
当然,Sniffer也存在不足之处,它只能抓取一个物理网段内的包,通信双方中间不能有路由或其他屏蔽广播包的设备,所以,对一般拨号上网的用户来说,是不可能利用Sniffer来窃听到其他人的通信内容的。
此外,现代网络常采用交换机作为网络连接设备枢纽,通常情况下,交换机不会让网络中每一台主机侦听到其他主机的通讯,此时Sniffer技术必须结合网络端口镜像技术进行配合,而衍生的安全技术则通过ARP欺骗来变相达到交换网络中的侦听。
问题:
在对所获得的数据包进行地址和目标地址分析时,为什么10.201.42.139所发送/接收的数据包的数量678比IP地址收发数据包的总数量675要大,目标地址分析却是合乎常理的呢?
附:
etherape使用方法
Etherape也是一个图形化的网络嗅探器。
与Ehtereal不同,EtherApe通过验证主机与主机之间的链接,图形化地显示网络目前所处的状态,它使用不同颜色的连线来表示位于不同主机之间的连接,而连线的粗细则表明主机间数据流量的大小,这些信息都是实时变化的,因而能够协助管理员随时了解到网络中各部分流量的变化情况。
EtherApe的安装
EhterApe支持Ethernet、FDDI和TokenRing等多种网络,能够实时地从网络或文件中读取网络流量的变化情况,此外它还可以将网络流量信息保存下来,以便在之后需要时再显示出来。
在
下面以Ethereal0.8.2为例,讲述如何安装EtherApe(使用的操作系统是RedHat8.0)。
首先下载最新的源码包并将其解压缩,代码如下:
#cpetherape-0.8.2.tar.gz/usr/local/src/
#cd/usr/local/src/
#tarxzvfetherape-0.8.2.tar.gz
EtherApe使用的是GNOME这一图形用户接口库。
与Ethereal和Tcpdump一样,它也使用pcap库(libpcap)对网络上传输的数据包进行截获和过滤。
在编译EtherApe之前,应先确定所需的这些库已经安装好,因为这是编译EtherApe时所必需的。
如果这些库已经安装,就可以执行下面的命令来编译并安装EtherApe:
#cdetherape-0.8.2
#./configure
#make
#makeinstall
用EtherApe分析网络流量
当编译并安装好EtherApe后,就可以执行“etherape”命令来启动EtherApe。
当用EtherApe截获在网络上传输的数据时,也要先为其指定过滤规则,否则EthreApe将捕获网络中的所有数据包。
单击工具栏上的“Pref.”按钮,打开“Preferences”对话框,在该对话框中的“Capture”属性页中,可以找到用于设置过滤规则的“Capturefilter”下拉框。
由于采用的都是pcap库,因此EtherApe过滤规则的设置与Tcpdump和Ethereal是相同的。
设置好过滤规则后,单击工具栏上的“Start”按钮,就可以开始对网络中感兴趣的数据包进行嗅探。
EhterApe图形化地显示网络流量,图5是当EtherApe处于Ethernet模式下时的网络流量图。
EtherApe提供了TokenRing、FDDI、Ethernet、IP和TCP五种监听模式。
当处于Ethernet模式下时,EtherApe会截获所有符合过滤规则的以太网数据包,但有时网络管理员可能只对IP数据包感兴趣,这时可以将EtherApe切换到IP模式。
单击“Capture”菜单,选择“Mode”菜单项,然后再选择相应的模式,就可以完成模式之间的切换。
EtherApe能够以图形的方式显示网络流量。
用户看到的是一个很直观的用于表示网络上各主机间流量大小的图,而不是单个的数据包,因而更容易从整体上把握整个网络的运行状况,在定位网络故障时相对来说也变得更加容易。