📄 1110.html
字号:
其他一些特别的原因,比如你要在某个特殊的环境拦截一些特殊的数据包。下面我们就来看 <br>
看一些在网络上经常使用的SNIFF。 <br>
<br>
(1)windows环境下 <br>
<br>
windows环境下当然是大名鼎鼎的netxray以及sniffer pro了,实际上很多人都是用他在 <br>
windows环境下抓包来分析,不过我想很少有人笨到去在别人的机器上安装一个图形界面的SNIFF, <br>
除非他和管理员很熟悉........ netxray的使用就不多说了,反正windows下的东西就是 <br>
click,click,click,非常的方便用户。 <br>
<br>
(2)UNUX环境下 <br>
<br>
UNUX环境下的sniff可以说是百花齐放,一抓就是一大把,如sniffit,snoop,tcpdump,dsniff <br>
等都是比较常见的,他们都有一个好处就是发布源代码,可以让你研究,当然也都是免费的:) <br>
<br>
1. sniffit <br>
<br>
sniffit可以运行在Solaris、SGI和Linux等平台上,由Lawrence Berkeley Laboratory 实验 <br>
室开发的一个免费的网络监听软件。最近Sniffit 0.3.7也推出了NT版本,并也支持WINDOWS2000. <br>
<br>
使用方法: <br>
-v 显示版本信息 <br>
-a 以ASCII形式将监听的结果输出。 <br>
-A 在进行记录时,所有不可打印的字符都用代替 <br>
-b 等同于同时使用参数-t & -s。 <br>
-d 将监听所得内容以十六进制方式显示在当前终端 <br>
-p 记录连接到的包,0为所有端口。缺省为0。 <br>
-P protocol 选择要检查的协议,缺省为TCP。可能的选择有IP、TCP、ICMP、UDP和他们的组合。 <br>
-s 指定sniffer 检查从 发送的数据包。 -t 指定sniffer 检查发送到的数据包。 <br>
-i 进入交互模式 <br>
-l 设定数据包大小,default是300字节 <br>
注:参数可以用@来表示一个IP范围,比如 -t 192.168.@ -t和-s 只适用于TCP/UDP数据包,对 <br>
于ICMP和IP也进行解释。但如果只选择了-p参数,则只用于TCP和UDP包。 <br>
<br>
举例说明: <br>
<br>
#sniffit -a -p 21 -t xxx.xxx.xxx.xxx <br>
<br>
监听流向机器xxx.xxx.xxx.xxx的21端口(FTP)的信息,并以ASCII显示 <br>
<br>
#sniffit -d -p 23 -b xxx.xxx.xxx.xxx <br>
<br>
监听所有流出或流入机器xxx.xxx.xxx.xxx的23端口(telnet)的信息,并以16进制显示 <br>
<br>
你可以在这里找到sniffit http://reptile.rug.ac.be/~coder/sniffit/sniffit.html <br>
<br>
2. snoop <br>
<br>
snoop默认情况安装在Solaris下,是一个用于显示网络交通的程序,不过SNIFF是把双刃剑, <br>
既然管理员能用他来监视自己的网络,当然一个心怀恶意的入侵者也可以用他来SNIFF自己感兴 <br>
趣的内容。值得一提的是, SNOOP被发现存在一个缓冲区溢出漏洞,当以导致入侵者以运行 <br>
snoop(通常为root)的身份远程进入系统。这是题外话,暂且就此打住。 <br>
<br>
使用方法: <br>
[ -a ] # Listen to packets on audio <br>
[ -d device ] # settable to le?, ie?, bf?, tr? <br>
[ -s snaplen ] # Truncate packets <br>
[ -c count ] # Quit after count packets <br>
[ -P ] # Turn OFF promiscuous mode <br>
[ -D ] # Report dropped packets <br>
[ -S ] # Report packet size <br>
[ -i file ] # Read previously captured packets <br>
[ -o file ] # Capture packets in file <br>
[ -n file ] # Load addr-to-name table from file <br>
[ -N ] # Create addr-to-name table <br>
[ -t r|a|d ] # Time: Relative, Absolute or Delta <br>
[ -v ] # Verbose packet display <br>
[ -V ] # Show all summary lines <br>
[ -p first[,last] ] # Select packet(s) to display <br>
[ -x offset[,length] ] # Hex dump from offset for length <br>
[ -C ] # Print packet filter code <br>
<br>
<br>
例如: <br>
<br>
#snoop -o saved A B <br>
<br>
监听机器A与B的谈话,并把内容存储于文件saved中 <br>
<br>
<br>
<br>
3. tcpdump <br>
<br>
tcpdmp也算是一个很有名气的网络监听软件,FREEBSD还把他附带在了系统上,是一个被 <br>
很多UNIX高手认为是一个专业的网络管理工具。 <br>
<br>
使用方法: <br>
tcpdump采用命令行方式,它的命令格式为: <br>
tcpdump [ -adeflnNOpqStvx ][ -c 数量 ][ -F 文件名 ][ -i 网络接口 ][ -r 文件名] <br>
[ -s snaplen ][ -T 类型 ][ -w 文件名 ][表达式 ] <br>
1. tcpdump的选项介绍 <br>
-a 将网络地址和广播地址转变成名字; <br>
-d 将匹配信息包的代码以人们能够理解的汇编格式给出; <br>
-dd 将匹配信息包的代码以c语言程序段的格式给出; <br>
-ddd 将匹配信息包的代码以十进制的形式给出; <br>
-e 在输出行打印出数据链路层的头部信息; <br>
-f 将外部的Internet地址以数字的形式打印出来; <br>
-l 使标准输出变为缓冲行形式; <br>
-n 不把网络地址转换成名字; <br>
-t 在输出的每一行不打印时间戳; <br>
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; <br>
-vv 输出详细的报文信息; <br>
-c 在收到指定的包的数目后,tcpdump就会停止; <br>
-F 从指定的文件中读取表达式,忽略其它的表达式; <br>
-i 指定监听的网络接口; <br>
-r 从指定的文件中读取包(这些包一般通过-w选项产生); <br>
-w 直接将包写入文件中,并不分析和打印出来; <br>
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc和snmp <br>
<br>
2. tcpdump的表达式介绍 <br>
<br>
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式 <br>
的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。 <br>
<br>
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net, <br>
port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0 <br>
是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host. <br>
<br>
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关 <br>
键字指明了 传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , <br>
dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是 <br>
src or dst关键字。 <br>
<br>
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在 <br>
FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether <br>
具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的 <br>
几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有 <br>
协议的信息包。 <br>
<br>
除了这三种类型的关键字之外,其他重要的关键字如下: <br>
gateway, broadcast,less,greater,还有三种 逻辑运算,取非运算是 'not ' '! ', 与运算 <br>
是'and','&&';或运算 是'or' ,'||'。 <br>
<br>
<br>
<br>
举例使用: <br>
<br>
#tcpdump host AAA.BBB.CCC.DDD <br>
<br>
将监听IP地址为AAA.BBB.CCC.DDD的机器的通话 <br>
<br>
#tcpdump tcp port 23 host AAA.BBB.CCC.DDD <br>
<br>
将监听IP地址为AAA.BBB.CCC.DDD的机器的23端口的通话 <br>
<br>
<br>
<br>
4. dsniff <br>
<br>
之所以要谈谈dsniff,是因为他不仅仅是一个sniff,在他的整个套件包中,包含了很多 <br>
其它有用的工具,如arpspoof,dnsspoof,macof,tcpkill等等,SNIFF的手段更加的多样和 <br>
复杂化。dsniff是由DugSong开发的你可以在他的主页上找到这个工具。 目前dsniff支持 <br>
OpenBSD (i386), Redhat Linux (i386), 和Solaris (sparc). 并且在FreeBSD, Debian Linux, <br>
Slackware Linux, AIX, 和HP-UX上也能运转得很好。但是dsniff需要几个其他的第三方软件进 <br>
行支持,他们分别是,Berkeley DB ,OpenSSL, libpcap, libnet, libnids。如果条件允 <br>
许的话,你最好能够亲自读一读dsniff的源代码,你可以在 <br>
http://naughty.monkey.org/~dugsong/ 找到dsniff。 <br>
<br>
<br>
六 深入sniff <br>
<br>
单纯的sniff的功能始终是局限的,所以在大多数的情况下,sniff往往和其他手段结合起来使 <br>
用,sniff和spoof已及其他技术手段结合在一起对网络构成的危害是巨大的。单纯的sniff好比缺 <br>
了一只腿,无法发挥大的作用,例如在sniff原理一节中我们讨论的例子里,我一再的强调我们使 <br>
用的是一个普通的HUB进行连接是有原因的,如果我们把在图一中的HUB用一个switch代替,那情况 <br>
就要复杂一些了,如图二所示: <br>
<br>
图(二) <br>
<br>
<br>
<br>
<br>
<br>
在图二中,我们的机器A、B、C与Switch相连接,而Switch通过路由器Router访问外部网络。我 <br>
们先来了解Switch的工作原理: <br>
<br>
在我们图一中的 HUB 只是简单地把所接收到的信号通过所有端口(除了信号来的那个口)重复 <br>
发送出去不同,而图二中的Switch却可以检查每一个收到的数据包,并对数据包进行相应的处理。 <br>
在Switch内保存着每一个网段上所有节点的物理地址,只允许必要的网络流量通过Switch。举例来 <br>
说,当Switch接收到一个数据包之后,根据自身保存的网络地址表检查数据包内包含的发送和接收 <br>
方地址。如果接收方位于发送方网段,该数据包就会被Switch丢弃,不能通过交换机传送到其它的 <br>
网段;如果接收方和发送方位于两个不同的网段,该数据包就会被Switch转发到目标网段。这样, <br>
通过交换机的过滤和转发,可以有效避免网络广播风暴,减少误包和错包的出现。顺便说一句,现在 <br>
Switch和HUB的价格相去无几,所以hub正逐渐被网络交换机取代。 <br>
<br>
现在回到我们的例子中来,在图二中仍然和图一一样,我们假设机器A上的管理员为了维护机器C, <br>
使用了一个FTP命令向机器C进行远程登陆,那么在这里,数据是这样走的:首先机器A上的管理员输入 <br>
的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网 <br>
驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了Switch上,而 <br>
Switch检查数据帧中的目的地址,并在他自身保存的网络地址表中知道了他应该把这数据帧发到机器 <br>
C那里,于是,接下来机器C接收到了从A发来的信息,发现他是发给自己的信息,于是进行分析处理。 <br>
<br>
OK,现在我们机器B上的管理员的好奇心只能深深的埋藏在心里了,因为数据包根本就没有经过他, <br>
就算他把自己的网卡设置成混杂模式也是有力无处使。 <br>
<br>
在了解在一个Switch环境下原理后,我们结合一些手段去设法sniff,是的,我们可以做到这一点, <br>
有许多的手段可以让管理员B满足他的好奇心,在下面我会提出几个办法,当然只是其中的一些办法 <br>
而已。 <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -