您的位置:首页 > 理论基础 > 计算机网络

linux下抓包--tcpdump的使用

2013-07-28 14:53 441 查看
例:tcpdump host 172.16.29.40 and port 4600 -X -s 500

tcpdump采用命令行方式,它的命令格式为:

  tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]

          [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]

          [ -T 类型 ] [ -w 文件名 ] [表达式 ]

  1. tcpdump的选项介绍

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

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

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

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

   -e    在输出行打印出数据链路层的头部信息;

   -f    将外部的Internet地址以数字的形式打印出来;

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

   -n    不把网络地址转换成名字;

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

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

   -vv    输出详细的报文信息;

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

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

   -i    指定监听的网络接口;

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

   -w    直接将包写入文件中,并不分析和打印出来;

   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议)

1. 监控主机为192.9.200.59上8000端口的tcp协议:

  tcpdump host 192.9.200.59 and tcp port 8000

2. 如果想要显示数据包的内容,需要使用-X参数,如,我想要显示捕获的http数据包http header的内容:

tcpdump -X host 192.9.200.59 and tcp port 8000

显示结果如下:

22:13:19.717472 IP testhost59.12535 > liujuan59.8000: . 1:330(329) ack 1 win 3278

0x0000: 4500 0171 e616 0000 8006 cb2b 0000 0000 E..q.......+....

0x0010: c009 c83b 30f7 1f40 0000 0002 0000 0002 ...;0..@........

0x0020: 5010 8000 b066 0000 504f 5354 202f 2048 P....f..POST./.H

0x0030: 5454 502f 312e 310d 0a43 6f6e 7465 6e74 TTP/1.1..Content

0x0040: 2d54 7970 653a 2074 6578 742f 786d 6c3b -Type:.text/xml;

0x0050: 2063 .c

3. 可以看到该结果只显示了http头的一部分,没有显示全,是因为tcpdump默认将显示的数据长度截断了,可以使用-s后面加数据长度,来设置数据显示长度:

tcpdump -X -s 0 host 192.9.200.59 and tcp port 8000

以上的例子中,-s 0 表示自动设置长度使其能够显示所有数据。

4. 捕获的数据太多,不断刷屏,可能需要将数据内容记录到文件里,需要使用-w参数:

tcpdump -X -s 0 -w aaa host 192.9.200.59 and tcp port 8000

则将之前显示在屏幕中的内容,写入tcpdump可执行文件同级目录下的aaa文件中。

文件查看方式如下,需要使用-r参数:

tcpdump -X -s 0 -r aaa host 192.9.200.59 and tcp port 8000

如果这样写:

tcpdump -r aaa

则只能看到最简单的数据传输交互过程,看不到数据包内容,查看时也需要使用相应的参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: