Solaris 系统中的snoop命令详解(下)
-P 不使用混杂模式,只能获取广播包和到本地主机的数据包
-c [maxCount] 记录最大包数,超过则自动停止
-d [dev] 接受包的设备名(网络接口)
-i [filename] 从文件输入(从一个以前的记录文件而不是网络设备中输入)
-p first[,last] 当从文件输入时,只显示从first指定到last的包
-o [filename] 保存所有数据包输出到文件,格式为RFC 1761-compliant
-q 当记录到文件时,使用安静模式,不回显数据
-N 解析IP地址到主机名(默认使用/etc/hosts作为解析列表)
-r 不解析主机名
-n 指定解析主机名所用的列表文件
-v 冗余模式,显示详细的数据包信息
===============================
192.168.0.2 -> Katty ETHER Type=0800 (IP), size = 60 bytes
192.168.0.2 -> Katty IP D=192.168.0.31 S=192.168.0.2 LEN=40,
ID=60866, TOS=0x0, TTL=128
192.168.0.2 -> Katty TCP D=22 S=1315 Ack=624914001 Seq=2987322768
Len=0 Win=65535
================================
除了命令选项以外,snoop还允许通过filter expression过滤模式来对数据包进行析取,以进行更精确的数据抓取和分析。snoop中expr的格式与Tcpdump基本兼容。
地址
host [hostname] 指定主机名,snoop将只获取此主机(源和目标)的数据包
from 或 src 指定源地址,后面必须跟host或ipaddr指令,将只获取以此地址为源的数据
to 或 dst 指定目标地址,后面必须跟host或ipaddr指令,将只获取以此地址为目的的数据
ipaddr 指定IP地址,功能同host
atalkaddr 指定appletalk地址,适用于appletalk协议
etheraddr 指定以太网MAC地址,适用于Ethernet协议
net [net] 指定网络地址,将抓取指定目标网络的数据
port [port] 指定TCP|UDP端口号,将只抓取指定端口的数据,适用于TCP|UDP协议
也可以根据/etc/services文件中指定的协议名字使用字符串
gateway [hostname|IP] 指定网关地址,将只抓取发送到指定网关的数据协议
inet 指定抓取IPV4协议
inet6 指定抓取IPV6协议
ethertype 抓取指定的Ethernet协议
ip, ip6, arp, rarp, pppoed, pppoes
udp, tcp, icmp, icmp6, ah, esp
分别指定以上类型的协议
pppoe PPPOE协议
broadcast 广播协议
multicast 多播协议
bootp, dhcp bootp和dhcp协议
apple applenet协议
decnet decnet协议
rpc prog [ , vers [ , proc ] ] 对应类型的RPC协议数据
ldap ldap协议
slp slp协议
sctp sctp协议
ospf ospf协议
类型
nofrag 不抓取分片数据包
此外,ether,ip,udp等协议关键字,都可以通过指定对应标志位的方式进行更详细的控制,例如使用ip[0]指定某一个位的标志。
操作符
在snoop过滤表达式中同样可以使用逻辑表达式来进行控制,对应的功能则与c,perl等语言中的类似。
and 与
or 或 , 或
not or ! 非
例如:
ipaddr 10.1.1.1 and port 23 抓取10.0.0.1:23的数据
host a or host b 抓取主机a和b的数据
not ipaddr 192.168.0.2 不抓取192.168.0.2的数据
指定 网络接口:/dev/pcn0 , 目标主机: Katty, 目标端口: TCP 23
这将只抓取到Katty的Telnet登录请求,以及所执行的命令。
================================
[Tracy@Katty]# snoop -d pcn0 dst host Katty and tcp port 23
Using device /dev/pcn0 (promiscuous mode)
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380 e
192.168.0.2 -> Katty TELNET C port=1380 l
192.168.0.2 -> Katty TELNET C port=1380 l
192.168.0.2 -> Katty TELNET C port=1380 y
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380 e
192.168.0.2 -> Katty TELNET C port=1380 l
192.168.0.2 -> Katty TELNET C port=1380 l
192.168.0.2 -> Katty TELNET C port=1380 y
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380 w
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380 e
192.168.0.2 -> Katty TELNET C port=1380 x
192.168.0.2 -> Katty TELNET C port=1380 i
192.168.0.2 -> Katty TELNET C port=1380 t
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
192.168.0.2 -> Katty TELNET C port=1380
===============================
现在可以看到,客户端的输入依次为
elly (Username)
elly (Password)
w (Command1)
exit (Command2)
Tips: 如果要看更详细的数据信息,只要加上-v参数就可以了哦。
现在对Snoop应该有个基本了解了吧,不过要使用...还是非常困难的,幸好现在有了Chaosreader。
Chaosreader是一个Snoop数据输出的分析工具,完全Perl写成,因此可以运行在所有支持Perl的操作系统上。Chaosreader能够支持对TCP/UDP/HTTP/FTP...等等一系列协议的跟踪和Session解析,甚至能够解析出ftp和http传输的文件,跟踪X-window的动作,对Telnet的数据进行回放等等。有了Chaosreader,就相当于在Snoop之上加了一双明亮的眼睛,非常方便。
Chaosreader支持有Tcpdump、snoop和Ethereal输出的数据包记录文件,自动解析之后会生成一系列文件,包含HTML格式的数据输出文件,协议传输中的图形附件,以及一些用于进行协议回放的perl脚本。
要使用Chaosreader,有下面几种快捷方法:
tcpdump -w outfile
snoop -o outfile
ethereal (或tethereal)保存cap数据
之后,适用chaosreader.pl outfile对文件进行分析处理,完成后即可在当前目录下生成一系列输出文件,可以使用任何一个Web浏览器打开index.html进行查看。
如果直接执行 chaosreader -s 5; netscape index.html ,那么chaosreader将自动运行当前系统中可用的sniffer类程序(自动搜索snoop或tcpdump),然后生成分析文件。
-s参数指定一定时间的抓取时间,以分钟为单位。
在每次分析中,Chaosreader可能会生成如下文件:
index.html Html index (本次抓包统计信息)
index.text Text index
index.file File index for standalone redo mode
image.html HTML report of images
getpost.html HTML report of HTTP GET/POST requests
session_0001.info TCP session #1的相关信息(如果有抓包过程中包含多个TCP Session,则每个Session都会生成一系列的Session文件)
session_0001.telnet.html 按时间顺序存放的html格式telnet数据
session_0001.telnet.raw 按时间顺序存档的telnet session数据
session_0001.telnet.raw1 server->client的telnet数据
session_0001.telnet.raw2 client->server的telnet数据
session_0002.web.html 按请求顺序存放的HTTP Session数据
session_0002.part_01.html HTTP portion of the above, a HTML file
session_0003.web.html HTML coloured 2-way
session_0003.part_01.jpeg HTTP portion of the above, a JPEG file
session_0004.web.html HTML coloured 2-way
session_0004.part_01.gif HTTP portion of the above, a GIF file
session_0005.part_01.ftp-data.gz 如果是ftp session,则传输数据存放在此文件中
...
总结所有的文件类型如下:
session_* TCP Sessions
stream_* UDP Streams
icmp_* ICMP 数据包
index.html HTML Index 文件
index.text Text Index 文件
index.file File Index for standalone redo mode only
image.html HTML report of images
getpost.html HTTP GET/POST 请求记录
*.info Session/Stream的描述信息
*.raw 按时间顺序排列的C<->S二路原始数据
*.raw1 server->client的原始数据
*.raw2 client->server的原始数据
*.replay Session回放程序,perl脚本,执行将在终端上模拟任务发生时的状况
*.partial.* Partial capture (tcpdump/snoop were aware of drops)
*.hex.html 2-way Hex dump, rendered in coloured HTML
*.hex.text 2-way Hex dump in plain text
*.X11.replay X-Window回放脚本,必须运行在X-Window下
*.textX11.replay X11通讯的文本模拟回放程序
*.textX11.html 2-way text report, rendered in red/blue HTML
*.keydata SSH通讯中的密钥中继传输数据
先在控制台上开启一个snoop,只记录IP数据:
===============================
[Tracy@Katty]# snoop -d pcn0 -o out ip
Using device /dev/pcn0 (promiscuous mode)
358 ^C
===============================
之后,我们通过网络分别执行了以下操作:
1. telnet
用户 elly 由192.168.0.2 telnet登录到Katty:23,并执行w,uname -a,exit ;
2. ssh
root 由 192.168.0.2 ssh登录到Katty:22,并执行w,pwd ;
3. http
root在dtconsole(控制台X窗口)上打开Mozilla访问http://www.google.com;
4. ftp
用户elly 由192.168.0.2通过ftp下载文件/etc/passwd;
5. X-Window
用户elly 由192.168.0.2执行xeye -display Katty:0,运行了一个xeye到远程的X桌面。
完成所有操作后,运行Chaosreader分析刚才snoop所记录的网络数据:
=============================
[Tracy@Katty]# chaosreader out
Chaosreader ver 0.94
Opening, out
Reading file contents,
100% (58408/58408)
Reassembling packets,
100% (358/358)
Creating files...
Num Session (host:port <=> host:port) Service
0012 192.168.0.31:32925,64.233.189.104:80 web
0005 192.168.0.2:1591,192.168.0.31:21 ftp
0004 192.168.0.31:6000,192.168.0.2:1590 X11
0009 192.168.0.2:1593,192.168.0.31:23 telnet
0001 192.168.0.2:1589,192.168.0.31:22 ssh
0008 192.168.0.2:1592,192.168.0.31:20 ftp-data
0013 10.0.0.1:138,10.255.255.255:138 netbios-dgm
0007 192.168.0.31:33242,202.96.209.6:53 domain
0003 192.168.0.31:33240,202.96.209.6:53 domain
0002 192.168.0.31:33239,202.96.209.6:53 domain
0010 192.168.0.31:33243,202.96.209.6:53 domain
0006 192.168.0.31:33241,202.96.209.6:53 domain
0011 192.168.0.31:33244,202.96.209.6:53 domain
index.html created.
=============================
Chaosreader分析snoop的输出文件out,识别出刚才进行过的所有网络连接,包含web、ftp、X11、telnet、ssh,以及dns和netbios-dgm。其中前五种分别是我们进行的网络操作,而netbios是windows网络中定期广播产生的干扰数据,domain则是在访问google时web请求前产生的dns解析请求。
经过分析产生了统计报告index.html和以下文件:
getpost.html Web访问时的get/post请求
httplog.text 文本格式的http访问日志
image.html 空
index.html 索引页面
index.text 文本索引页面
session_0001.textSSH.html ssh连接日志
session_0001.textSSH.keydata ssh key
session_0001.textSSH.replay ssh连接回放脚本
session_0004.X11.replay X-Window Session回放脚本
session_0004.textX11.html
session_0004.textX11.replay
session_0005.ftp.html ftp连接日志
session_0008.part_01.ftp-data.data ftp传输的文件
session_0009.telnet.html telnet连接日志
session_0009.telnet.replay telnet连接回放脚本
session_0012.part_01.html
session_0012.web.html web连接详细日志
stream_0002.domain.html DNS请求
stream_0003.domain.html
stream_0006.domain.html
stream_0007.domain.html
stream_0010.domain.html
stream_0011.domain.html
看一下记录下的详细日志:
ftp: session_0005.ftp.html
===============================
ftp: 192.168.0.2:1591 -> 192.168.0.31:21
File out, Session 5
220 Katty FTP server ready.
USER elly
331 Password required for elly.
PASS elly
230 User elly logged in.
CWD /etc
250 CWD command successful.
PORT 192,168,0,2,6,56
200 PORT command successful.
RETR passwd
150 Opening ASCII mode data connection for passwd (628 bytes).
226 Transfer complete.
QUIT
221-You have transferred 644 bytes in 1 files.
221-Total traffic for this session was 985 bytes in 1 transfers.
221-Thank you for using the FTP service on Katty.
221 Goodbye.
==============================
另外,在session_0008.part_01.ftp-data.data文件中记录下了本次连接传输的文件副本。
telnet: session_0009.telnet.html
==============================
telnet: 192.168.0.2:1593 -> 192.168.0.31:23
File out, Session 9
..%..%..%..%...........%.......&..&..&..&........#..'..$.............P.
....#..'..$..#..'..$........#..'..$....ANSI..........................
login: ...eellllyy
Password: elly
Last login: Tue Feb 15 21:32:09 from 192.168.0.2
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
-bash-3.00$ ww
.... 9..32.. .... 4:18, 3 ...., ..........0.08, 0.18, 0.13
...... ...... ........ .... JCPU PCPU ........
root console .... 9..24.. 8 1 /usr/dt/bin/sdt_shell -c ?
root pts/2 .... 9..31.. 1 -sh
root pts/5 .... 9..25.. 1 snoop -o out ip
elly pts/6 .... 9..32.. w
-bash-3.00$ uunnaammee --aa
SunOS Katty 5.10 Generic i86pc i386 i86pc
-bash-3.00$ eexxiitt
logout
=============================
注意,由于telnet的回显协议,所以每个字符都会重复显示一遍,如果要避免这种情况可以在snoop设置中指定dst参数。
web:
session_0012.part_01.html 记录下了访问的页面镜像;
httplog.text 记录下了访问页面的连接过程;
session_0012.web.html 记录下了访问页面的详细信息;
ssh:
由于ssh连接加密算法协商阶段完成之后,通讯就完全加密了,所以只有部分数据可见。
X-Window:
本身没有记录太多信息,但是生成了一个session_0004.X11.replay脚本,来模拟回放当时的操作。
另外,telnet连接也生成了一个相应的回放脚本session_0009.telnet.replay。回放只是模拟当时的操作,并按对应的时间顺序显示出来,并不进行真实的操作,因此可以放心测试。但是X-Window回放需要注意,因为X的回放是完全真实的操作,有可能会影响到系统哦。另外,如果X回放无法运行,可以先在当前X桌面上执行xhost +,然后再运行回放脚本。
总结...Chaosreader的连接重组,协议解析,数据析取,模拟回放功能都是极为强大的,给原本鸡肋的snoop注入了极大的生命力,另外还提供了对tcpdump、dsniff和ethereal的支持,的确是网络分析中的一个好工具。
一点Tips:
记住,几乎任何网络抓包工具的数据报都是可以相互转换的(虽然在软件自身可能不兼容)。Ethereal当前就已经可以支持大多数抓包工具所生成的数据记录文件,而以前我推荐过的更加强大的Wildpackets ProCovert更是可以转换当前几乎所有抓包软件生成的数据记录。因此我们可以用一种工具抓包,转换过之后很灵活方便的使用最适合分析它的软件来进行细化的分析,例如在Windows上用Sniffer Pro,Linux上用TCPDumpSunOS上用Snoop,之后可以任意把它转换成对方的数据类型进行分析,就方便多了吧。