Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187951
  • 博文数量: 64
  • 博客积分: 1451
  • 博客等级: 上尉
  • 技术积分: 665
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-24 10:07
文章分类

全部博文(64)

文章存档

2010年(7)

2009年(57)

我的朋友

分类: LINUX

2009-11-04 12:04:33

2009-09-14   追风

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。并且tcpdump还提供了多种参数,通过不同的组合,对截取到的数据进行过滤。

不带任何参数的tcpdump将搜索系统中所有的网络接口,并显示它截获的所有数据,如下:
# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
16:45:25.244173 IP pek-cc-vb01s.32771 > 128.224.163.153.634: F 3999634222:3999634222(0) ack 931643423 win 49232
16:45:25.478109 IP 128.224.163.153.634 > pek-cc-vb01s.32771: . ack 1 win 501
16:45:25.244360 IP 128.224.163.153.634 > pek-cc-vb01s.1023: UDP, length 88
16:45:25.294835 arp who-has 128.224.166.190 tell 128.224.166.38
16:45:25.476792 IP pek-cc-vb01s.32921 > 128.224.163.153.634: UDP, length 32
16:45:25.477090 IP 128.224.163.153.39713 > pek-dca.corp.ad.wrs.com.domain: 14955+ PTR? 153.163.224.128.in-addr.arpa. (46)
16:45:25.477340 IP pek-dca.corp.ad.wrs.com.domain > 128.224.163.153.39713: 14955 NXDomain 0/1/0 (103)

这些数据不一定全都需要,而且数据太多不利于分析。所以,可以用tcpdump提供以下参数对截取信息进行过滤:

1)-i 选择过滤的网络接口,如果是作为路由器至少有两个网络接口,通过这个选项,就可以只过滤指定的接口上通过的数据。例如:

tcpdump -i eth0 只显示通过eth0接口上的所有报头。

2)ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。
例如:

tcpdump ip src……

只过滤数据-链路层上的IP报头。

tcpdump udp and src host 192.168.0.1

只过滤源主机192.168.0.1的所有udp报头。

3)src、dst、port、host、net、ether、gateway这几个选项又分别包含src、dst 、port、host、net、ehost等附加选项。他们用来分辨数据包的来源和去向
src host 192.168.0.1指定源主机IP地址是192.168.0.1
dst net 192.168.0.0/24指定目标是网络192.168.0.0。
另外,ether后面跟的不是IP地址而是物理地址,而gateway则用于网关主机。

tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24

过滤的是源主机为192.168.0.1与目的网络为192.168.0.0的报头。

tcpdump ether src 00:50:04:BA:9B and dst……

过滤源主机物理地址为XXX的报头(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽)。

tcpdump src host 192.168.0.1 and dst port not telnet

过滤源主机192.168.0.1和目的端口不是telnet的报头。

数据显示/输入输出

TcpDump提供了足够的参数来让我们选择如何处理得到的数据,如下所示:

-n 不进行IP地址到主机名的转换。

如 果不使用这一项,当系统中存在某一主机的主机名时,TcpDump会把IP地址转换为主机名显示,就像这样:eth0 < ntc9.1165> router.domain.net.telnet,使用-n后变成了:eth0 < 192.168.0.9.1165 > 192.168.0.1.telnet。

-nn 不进行端口名称的转换。

上面这条信息使用-nn后就变成了:eth0 < ntc9.1165 > router.domain.net.23。

-N 不打印出默认的域名。

还是这条信息-N 后就是:eth0 < ntc9.1165 > router.telnet。

-X 显示数据包的内容

tcpdump -X host 192.168.0.1

-s 设置数据显示长度

因为tcpdump默认将显示的数据长度截断,所以-X参数显示的数据包内容并不全。通过-s,设置数据显示长度,"-s 0"表示自动设置长度使其能够显示所有数据

-w 参数指定将监听到的数据包写入文件中保存

查看该文件时,也要用tcpdump命令,如:
tcpdump arp -i eth0 -X -s 0 -w aaa  生成一个aaa文件
tcpdump arp -X -r aaa  读取文件信息,注意,-r参数一定要紧挨着文件名,不可和其他参数颠倒位置。
你也可以执行tcpdump -i eth0 -e aaa,将所有信息写入aaa文件,然后在读取时通过加不同的参数来过滤出所需要的数据。

-O 不进行匹配代码的优化。
-t 不打印UNIX时间戳,也就是不显示时间。
-tt 打印原始的、未格式化过的时间。
-v 详细的输出,也就比普通的多了个TTL和服务类型。
阅读(2097) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~