概述tcpdump命令是Linux中的截包命令工具,强大且易于使用。tcpdump基于底层libpcap库开发,运行需要root权限。
基本使用与命令选项例:截获主机收到和发出的所有数据包。 命令:tcpdump
说明: tcpdump截取包默认显示数据包的头部。 基础格式:时间 数据包类型 源IP 端口/协议 > 目标IP 端口/协议 协议详细信息
按下Ctrl+C会终止tcpdump命令。且会在结尾处生成统计信息。
选项查看 命令:tcpdump --h
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
说明: 最后会自动生成统计信息。
将抓包信息写入文件 -w 使用-w选项指定记录文件。 命令:tcpdump -c 10 -w tcpdump_test.log
说明: 保存的文件不是文本格式,不能直接查看。tcpdump保存的文件的格式是几乎所有主流的抓包工具软件都可以读取。所以可以使用更易读的图形界面工具来查看记录文件。
读取记录文件 -r 使用-r选项读取文件。 命令:tcpdump -r tcpdump_test.log
打印出所有可工作的接口 -D 命令:tcpdump -D
其中网卡为eth0与eth1。
指定监控的网卡 -i 命令:tcpdump -i eth0
显示更详细的数据包信息 -v -vv 选项-v,-vv可以显示更详细的抓包信息。
不使用域名反解 -n 使用-n后,tcpdump会直接显示IP地址,不会显示域名(与netstat命令相似)。
增加抓包时间戳 -tttt选项 使用-tttt选项,抓包结果中将包含抓包日期: 命令:tcpdump -tttt
条件过滤过滤:指定需要抓取的协议 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
方法二:使用-X参数能16进制数与ASCII码共同显示数据包。 例:只抓取1个数据包,并显示其内容。 命令:tcpdump -c 1 -X
逻辑表达式使用基本逻辑组合拼装出更精细的过滤条件。 逻辑与关系,使用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 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) |