48、tcpdump简单使用

1、说明

tcpdump - dump traffic on a network

tcpdum option

tcpdump [-adeflnNOpqStvx] [-c 数量][-F 文件名][-i 网络界面][-r 文件名][-s snaplen][-T 类型][-w 文件名][表达式]

TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供andornot等逻辑语句来帮助你去掉无用的信息。

系统时间 来源主机.端口 > 目标主机.端口 数据包参数

07:40:51.668134 IP 192.168.161.160 > 10.6.12.8: ICMP echo request, id 12587, seq 5, length 64

07:40:51.671144 IP 10.6.12.8 > 192.168.161.160: ICMP echo reply, id 12587, seq 5, length 64

tcpdump过滤出来的数据用Ethereal 来分析。

2、option

-a

将网络位址和广播地址转变成名字;

-b

在数据链路层上选择协议,包括iparprarpipx都是这一层的

-d

将匹配信息包的代码以人们能够理解的汇编格式给出;

-dd

将匹配信息包的代码以c语言程序段的格式给出;

-ddd

将匹配信息包的代码以十进制的形式给出;

-e

在输出行列印出资料连结层的头部信息;

-f

将外部的Internet位址以数位的形式打印出来;

-l

使标准输出变为缓冲行形式;

进行重定向

-n

不把网络位址转换成名字;

-nn

不进行端口名称的转换。

-N

不打印出默认的域名。

-s

指定数据包的长度

-t

在输出的每一行不打印时间戳;

-tt

打印原始的、未格式化过的时间。

-tttt

完整的时间格式

-v

输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;

-vv

输出详细的报文信息;

-c

在收到指定的包的数目后,tcpdump就会停止;

-F

从指定的文件中读取表达式,忽略其他的表达式;

-X

print packet format in hex and ASCII.

-i

指定监听的网络界面;

-r

从指定的档中读取包(这些包一般通过-w选项产生)

-w

直接将包写入档中,并不分析和打印出来;

src、dstporthostnetethergateway这几个选项又分别包含srcdst porthostnetehost等子选项。他们用来分辨数据包的来源和去向。host指定主机相关无论它是源还是目的,net指定网络相关的,ether是物理地址,而gateway则用于网关。

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

-T

将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远端过程)

3、表达式

1)表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件。

在表达式中一般有如下几种类型的关键字,一种是关于类型的关键字,主要包括hostnetport;第二种是确定传输方向的关键字,主要包括src,dst,dst or src, dst and src;第三种是协议的关键字,主要包括ip ,arp,rarp,tcp,udp等类型。

还有其他关键字,gateway, broadcast,less,greater,还有三种逻辑运算,非'not ' '! ';与'and','&&';或'or' ,'||'

2)src > dst:表明从源地址到目的地址, flagsTCP包中的标志信息,"." (没有标记)SSYN标志, F (FIN), P(PUSH) , R (RST) ; data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针。

4、示例

1)tcpdump //监听所有数据包

2)tcpdump -b arp

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

4)src host 192.168.0.1 //指定源主机IP地址是192.168.0.1

5)dst net 192.168.0.0/24 //指定目标是网络192.168.0.0

6)tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24

7)tcpdump ether src 00:50:04:BA:9B

8)tcpdump src host 192.168.0.1 and dst port not telnet //过滤源主机192.168.0.1和目的端口不是telnet的报头

9)tcpdump ip//只过滤数据-链路层上的IP报头。

10)tcpdump udp and src host 192.168.0.1 //只过滤源主机192.168.0.1的所有udp报头。

11)tcpdump tcp port 23 host 210.27.48.1

12)tcpdump -w test.out -i eth0 tcp port 6881

13)tcpdump -w test.out -i eth0 tcp port 6881 or udp \( 33210 or 33220 \)

14)tcpdump -w test.out dst 10.168.28.22 and tcp port 22

15)tcpdump tcp portrange 20-24

16)tcpdump -s 1500 //-s 0就可以按包长,截取数据

17)tcpdump -l > dat & tail -f  dat”,例如tcpdump -l |grep "sldfj"

18)tcpdump ip host 210.27.48.1 and !210.27.48.2

5、其他

1)在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不应该接收的信息包,sniffer工具却使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的效果。

2)显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,可以屏蔽内核中的bpfilter伪设备。一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行。在FreeBSD下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之类的网络分析工具。

参考

1http://baike.baidu.com/view/76504.htm

2http://gosman.blogbus.com/logs/5504841.html

3】 后面的讨论不错

http://www.chinaunix.net/jh/29/674578.html

4http://jessy.blog.51cto.com/476840/131993

5http://linux.vbird.org/linux_server/0140networkcommand.php#tcpdump

posted @ 2011-09-28 21:00  浪里飞  阅读(473)  评论(0编辑  收藏  举报