tcpdump和ethereal可以用来获取和分析网络通讯活动,他们都是使用libpcap库来捕获网络封包的。在混杂模式下他们可以监控网络适配器的所有通讯活动并捕获网卡所接收的所有帧。要想设置网络接口为混杂模式并执行这些命令来捕获所有的网络封包,需要具有超级用户的权限。
你可以使用这些工具来探究网络相关问题。你可以发现TCP/IP重发、窗口大小的缩放、名字解析的问题、网络配置错误等。注意这些工具只能监控网络适配器所接收到的帧,并不能监控到整个网络的通讯情况。
tcpdump
tcpdump是一个简单却很强大的工具。它提供基本协议的分析功能,让你获得网络使用的概况。tcpdump支持许多选项和复杂的表达式用于过滤所要捕获的帧(捕获过滤器【Capture filter】),下面让我们一起来了解一下。
选项:
-i <接口> :网络接口
-e :打印链路层【link-level】头信息
-s <snaplen> :从每个封包中截取<snaplen>字节
-n :不执行DNS解析
-w <文件名> :写入文件
-r <文件名> :从文件中读取
-v, -vv, -vvv :输出详细的结果
捕获过滤器表达式:
关键字:host dst, src, port, src port, dst port, tcp, udp, icmp, net, dst net, src net, 等
下面操作符可以用来合并多个Primitive:
非('!'或者'not')
与('&&'或者'and')
或('||'或者'or')
常用表达式示例:
▶ DNS查询封包
tcpdump -i eth0 'udp port 53'
▶ 连接192.168.1.10的FTP控制和数据会话。
tcpdump -i eth0 'dst 192.168.1.10 and (port ftp or ftp-data)'
▶ 连接到192.168.2.253的HTTP会话
tcpdump -ni eth0 'dst 192.168.2.253 and tcp and port 80'
▶ 连接到192.138.2.0/24子网的Telnet会话
tcpdump -ni eth0 'dst net 192.168.2.0/24 and tcp and port 22'
▶ 源地址与目的地址不在192.168.1.0/24子网内并且TCP SYN或TCP FIN标志开启(TCP连接建立或结束)
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net 192.168.1.0/24'
例子2-22:tcpdump输出结果示例
 
关于更多详细内容参见man手册
ethereal
ethereal与tcpdump有着相似的功能但更加复杂,有进阶的协议分析和报告功能。它可以通过图形化界面或
命令行来使用,它属于ethereal工具包的一部分。
像tcpdump一样它也可以使用捕获过滤器,并且还支持显示过滤器,这样可以减少帧。这里有一些常用表达
式例子:
▶ IP
ip.version == 6 and ip.len > 1450
ip.addr == 129.111.0.0/16
ip.dst eq www.example.com and ip.src == 192.168.1.1
not ip.addr eq 192.168.4.1
▶ TCP/UDP
tcp.port eq 22
tcp.port == 80 and ip.src == 192.168.2.1
tcp.dstport == 80 and (tcp.flags.syn == 1 or tcp.flags.fin == 1)
tcp.srcport == 80 and (tcp.flags.syn == 1 and tcp.flags.ack == 1)
tcp.dstport == 80 and tcp.flags == 0x12
tcp.options.mss_val == 1460 and tcp.option.sack == 1
▶ Application
http.request.method == "POST
smb.path contains \\\\SERVER\\SHARE

图2-4:ethereal图形化界面