功能描述
使用tcpdump命令可以实现强大的网络数据抓包分析详解,可以将网络中传送的数据包的头完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来筛选信息。
tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以打印出所有经过网络接口的数据包的头信息。
tcpdump命令工作时先要把网卡的工作模式切换到混杂模式。所以tcpdump命令需要以root身份运行。tcpdump命令是linux下使用最广泛的网络协议分析工具。使用tcpdump命令时,必须精通TCP/IP协议工作原理。
命令语 法
tcpdump [选项] [表达式]
选项含义
选项
含义
-w
把数据包数据写入指定的文件。
-c
收到指定的数据包数目后,就停止进行倾倒操作。
-p
不让网络界面进入混杂模式。
-r
从指定的文件读取数据包数据。
-n
不把主机的网络地址转换成名字。
-i
使用指定的网络截面送出数据包。
-B
设定作业系统的铺获缓冲区大小
-q
快速输出,仅列出少数的传输协议信息。
-A
指定将每个监听到的数据包以ACSII可见字符打印
-nn
指定将每个监听到的数据包中的域名转换成IP地址,端口从应用名称转换成端口号后显示
-S
用绝对而非相对数值列出 TCP 关联数。
-e
在每列倾倒资料上显示连接层级的文件头。
-s
设置每个数据包的大小。
-t
在每列倾倒资料上不显示时间戳记。
-K
不要试图验证IP、TCP或UDP校验和
-L
在指定的模式列出该接口的已知数据链路类型并退出
-F
指定内含表达方式的文件。
-C
在把原始数据包直接保存到文件之前,检查文件大小是否超过指定文件大小,如果超过将关闭此文件,另外创建一个文件继续用于原始数据包的记录。新创建的文件名与指定的文件名一致,但文件名后多了一个数字。该数字会从1开始随着新创建文件的增多而增加。文件大小的单位是百万字节(1MB)
-m
从文件模块加载SMI MIB模块定义
-M
如果TCP数据包有TCP-MD5选项,那么为其摘要的验证指定一个公共的密钥密码
-T
强制将表达方式所指定的数据包转译成设置的数据包类型。
-W
与-C选项配合使用,限制可以打开的文件数目,并且当文件数据超过这里设置的限制时,依次循环替代之前的文件,这相当于一个文件缓冲池。同时会使得每个文件名的开头会出现足够多并用来占位得的0,这可以方便这些文件被正确地排序
-y
设置数据链接类型
-Z
使tcpdump放弃自己的超级权限(如果以root用户动tcpdump,tcpdump将会有超级用户权限 ),并把当前tcpdump的用户UID设置为指定用户首要所属组群的GID
例
捕获第一个网络接口上所有流过的数据包
[[email protected]~]# tcpdump
指定监听一个数据包,达到指定数量后自动停止抓包
[[email protected]~]# tcpdump -c 1
将捕获到的数据包写入/root/dumpfile文件中保存
[[email protected]~]# tcpdump -w /root/dumpfile
捕获经过网络接口eth0的数据包
[[email protected]~]# tcpdump -i eth0
捕获主机rhel收到和发出的所有数据包
[[email protected]~]# tcpdump host rhel
捕获主机192.168.0.2收到和发出的所有数据包。
[[email protected]~]# tcpdump host 192.168.0.2
捕获主机192.168.0.2发送的所有数据包。
[[email protected]~]# tcpdump ip src 192.168.0.2
捕获所有发送到IP地址192.168.0.2的数据包
[[email protected]~]# tcpdump ip dst 192.168.0.2
捕获主机rhel和主机rhel2或rhel3之间的流量
[[email protected]~]# tcpdump host rhell and (rhel2 or rhel3 )
捕获主机192.168.0.2和主机192.168.0.4或192.168.0.5之间的通信
[[email protected]~]# tcpdump host 192.168.0.2 and (192.168.0.4 or 192.168.0.5 )
捕获主机rhel与主机linux之外的任何主机之间的所有IP数据包
[[email protected]~]# tcpdump ip host rhel and not linux
捕获主机192.168.0.2和主机192.168.0.5之外的所有主机通信的IP数据包
[[email protected]~]# tcpdump ip host 192.168.0.2 and ! 192.168.0.5
捕获主机rhel发送的经过网络接口eth0的数据包
[[email protected]~]# tcpdump -i eth0 src host rhel
捕获所有发送到主机rhel的经过网络接口eth0的数据包
[[email protected]~]# tcpdump -i eth0 dst host rhel
捕获本机UDP协议123端口的数据包
[[email protected]~]# tcpdump udp port 123
捕获本地主机与网络地址ucb-ether上的主机之间的所有数据包(网络地址在/etc/networks文件中定义)
[[email protected]~]# tcpdump net ucb-ether
捕获非本地主机的每个TCP对话的开始和结束包(SYN和FIN包)
[[email protected]~]# tcpdump 'tcp[tcpflags]& (tcp-syn|tcp-fin) !=0 and not src and dst net localnet'
显示不是通过以太网广播或多播信息包发送的IP广播或多播数据包
[[email protected]~]# tcpdump 'ether[0] & 1 = 0 and ip[16]>=224'
显示echo request或echo reply类型以外的ICMP包
[[email protected]~]# tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
捕获网络192.168.0.0/24发送的所有数据包
[[email protected]~]# tcpdump src net 192.168.0.0/24
捕获所有发送到网卡MAC地址00:0C:29:FA:19:10的数据包
[[email protected]~]# tcpdump ether dst 00:0C:29:FA:19:10
捕获ARP协议数据包
[[email protected]~]# tcpdump -p arp
捕获UDP协议,端口号为53的数据包
[[email protected]~]# tcpdump -p udp port 53