> Linux教程 > 系统运维 >

tcpdump 命令行抓包工具

概述

tcpdump命令是Linux中的截包命令工具,强大且易于使用。tcpdump基于底层libpcap库开发,运行需要root权限。

 

基本使用与命令选项

例:截获主机收到和发出的所有数据包。

命令:tcpdump

wps_clip_image-10938

说明:

tcpdump截取包默认显示数据包的头部。

基础格式:时间 数据包类型 源IP 端口/协议 > 目标IP 端口/协议 协议详细信息

 

按下Ctrl+C会终止tcpdump命令。且会在结尾处生成统计信息。

wps_clip_image-6466

 

 

选项查看

命令:tcpdump --h

wps_clip_image-26739

tcpdump version 4.1-PRE-CVS_2012_03_26  表示工具版本。

libpcap version 1.4.0    表示libpcap的版本。

 

选项:

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

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

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

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

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

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

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

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

-n  直接显示IP地址,不现实名称;

-nn  端口名称显示为数字形式,不现实名称;

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

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

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

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

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

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

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

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

 

 

 

指定抓包数量 -c

指定抓取2个数据包。

命令:tcpdump -c 2

wps_clip_image-3758

说明:

最后会自动生成统计信息。

 

将抓包信息写入文件 -w

使用-w选项指定记录文件。

命令:tcpdump -c 10 -w tcpdump_test.log

wps_clip_image-29699

说明:

保存的文件不是文本格式,不能直接查看。tcpdump保存的文件的格式是几乎所有主流的抓包工具软件都可以读取。所以可以使用更易读的图形界面工具来查看记录文件。

 

读取记录文件 -r

使用-r选项读取文件。

命令:tcpdump -r tcpdump_test.log

wps_clip_image-16804

 

打印出所有可工作的接口 -D

命令:tcpdump -D

wps_clip_image-3795

其中网卡为eth0与eth1。

 

指定监控的网卡 -i

命令:tcpdump -i eth0

 

显示更详细的数据包信息 -v  -vv

选项-v,-vv可以显示更详细的抓包信息。

wps_clip_image-14398

 

 

不使用域名反解 -n

使用-n后,tcpdump会直接显示IP地址,不会显示域名(与netstat命令相似)。

 

增加抓包时间戳 -tttt选项

使用-tttt选项,抓包结果中将包含抓包日期:

命令:tcpdump -tttt

wps_clip_image-12169

 

 

 

条件过滤

过滤:指定需要抓取的协议

tcpdump可以只抓某种协议的包,支持指定以下协议:ip,ip6,arp,tcp,udp,wlan等。

命令:

tcpdump udp

tcpdump icmp

tcpdump tcp

tcpdump arp

 

过滤:指定协议的端口号

使用port参数,用于指定端口号。

命令:tcpdump tcp port 80

 

使用portrange参数,用于指定端口范围。

命令:tcpdump tcp portrange 1-1024

 

过滤:指定源与目标

src 表示源。

dst 表示目标。

命令:

tcpdump src port 8080

tcpdump dst port 80

 

过滤:指定特定主机的消息包

使用host指定需要监听的主机。

命令:tcpdump host 192.168.1.113

注意:若使用了host参数使用了计算机名或域名。例tcpdump host shi-pc ,则无法再使用-n选项。

 

过滤:指定数据包大小

使用greater(大于)与less(小于)可以指定数据包大小的范围。

例:只抓取大于1000字节的数据包。

命令:tcpdump greater 1000

例:只抓取小于10字节的数据包。

命令:tcpdump less 10

 

 

 

查看数据包完整内容

tcpdump默认不显示数据包的详细内容。

 

方法一:使用-A参数能以ASCII码显示数据包。

例:只抓取1个数据包,并显示其内容。

命令:tcpdump -c 1 -A

wps_clip_image-15285

 

 

方法二:使用-X参数能16进制数与ASCII码共同显示数据包。

例:只抓取1个数据包,并显示其内容。

命令:tcpdump -c 1 -X

wps_clip_image-6904

 

 

 

逻辑表达式

使用基本逻辑组合拼装出更精细的过滤条件。

逻辑与关系,使用and。

命令:

tcpdump tcp and host 192.168.1.112

tcpdump tcp and src 192.168.1.112 and port 8080

 

逻辑或关系,使用or。

命令:

tcpdump host 192.168.1.112 or 192.168.1.113

 

逻辑非关系,使用not,也可以使用 ! 。

若使用 ! 必须与其后面的字符隔开一个空格。

例:当通过ssh协议远程使用tcpdump时,为了避免ssh的数据包的输出,所以一般需要禁止ssh数据包的输出。

命令:

tcpdump not tcp port 22

tcpdump ! tcp port 22

 

括号

括号需要使用在引号内,或转意使用。否则会报错。

例:抓取非22端口,且主机为192.168.1.112 和 192.168.1.113的TCP数据包。

命令:

tcpdump not tcp port 22 and host 192.168.1.112or192.168.1.113

tcpdump "not tcp port 22 and host (192.168.1.112 or 192.168.1.113)"

tcpdump not tcp port 22 and host "(192.168.1.112 or 192.168.1.113)"



(责任编辑:IT)