一、概述
tcpdump,用简单的语言概括就是dump the traffic on a network,是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具,windows平台有sniffer等工具,tcpdump可以将网络中传输的数据包的"包头"全部捕获并进行分析,其支持网络层、特定的传输协议、数据发送和接收的主机、网卡和端口的过滤,并提供and、or、not等语句进行逻辑组合捕获数据包或去掉不用的信息。
二、核心参数图解
1、option可选参数:将在后边一一解释;
2、proto类过滤器:根据协议进行过滤,可识别的关键词有: tcp, udp, icmp, ip, ip6, arp, rarp,ether,wlan, fddi, tr, decnet;
3、type类过滤器:可识别的关键词有:host, net, port, portrange,这些词后边需要再接参数;
4、direction类过滤器:根据数据流向进行过滤,可识别的关键字有:src, dst,同时你可以使用逻辑运算符进行组合,比如 src or dst。
三、常规过滤规则
常规过滤规则包括proto、type、direction 这三类过滤器。
1、基于IP地址过滤:host。
- 使用host可以指定host ip 进行过滤:tcpdump host 192.168.1.1
- 数据包的 ip 可以再细分为源ip和目标ip两种:
(1)根据源ip进行过滤:tcpdump -i eth0 src 192.168.1.1
(2)根据目标IP进行过滤:tcpdump -i eth0 dst 192.168.1.1
host表示主机(包含src与dst),src表示源主机,dst表示目的主机。
2、基于网段进行过滤:net。
- 若ip范围是一个网段,可以直接这样指定:tcpdump net 192.168.1.0/24
意思是抓取网段192.168.1.0/24的数据包,包含src与dst
- 网段也可以细分为源网段和目标网段:
(1)根据源网段进行过滤:tcpdump src net 192.168.1.0/24
(2)根据目标网段进行过滤:tcpdump dst net 192.168.1.0/24
3、基于端口过滤:port。
- 使用 port 可以指定特定端口进行过滤(包含源与目的):tcpdump port 8088
- 端口可以细分为源端口,目标端口:
(1)根据源端口进行过滤:tcpdump src port 8088
(2)根据目标端口进行过滤:tcpdump dst port 8088
- 同时指定两个端口:tcpdump port 80 or port 8088 或 tcpdump port 80 or 8088
- 指定端口段:tcpdump portrange 8000-8080
- 对于一些常见协议的默认端口,可以直接使用协议名,而不用具体的端口号:比如
http(80):tcpdump port http
ftp(21):tcpdump port ftp
ssh(22):tcpdump port ssh
4、基于协议进行过滤:proto。
常见的网络协议有:tcp, udp, icmp, http, ip,ipv6 等。
若你只想查看 icmp 的包,可以直接:tcpdump icmp
四、可选参数解析
1、设置不解析域名
- -n:不把ip转化成域名,直接显示 ip;
- -nn:不把协议和端口号转化成名字;
- -N:不打印出host 的域名部分,比如,,如果设置了此选现,tcpdump 将会打印'nic' 而不是 'nic.ddn.mil'。
2、控制详细内容的输出
- -v:产生详细的输出. 比如包的TTL,id标识,数据包长度,以及IP包的一些选项。同时它还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和;
- -vv:产生比-v更详细的输出. 比如NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码。
- -vvv:产生比-vv更详细的输出。比如 telent 时所使用的各种扩展选项都会被打印, 如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来。
3、控制时间的显示
- -t:在每行的输出中不输出时间;
- -tt:在每行的输出中输出时间戳;
- -ttt:输出时,每两行打印会延迟一段时间(以毫秒为单位);
- -tttt:在每行打印的时间戳之前添加日期的打印(此选项输出的时间最直观);
4、控制数据包头部的显示
- -x:以16进制的形式打印每个包的头部数据(但不包括数据链路层的头部);
- -xx:以16进制的形式打印每个包的头部数据(包括数据链路层的头部);
- -X:以16进制和 ASCII码形式打印出每个包的数据(但不包括连接层的头部);
- -XX:以16进制和 ASCII码形式打印出每个包的数据(包括连接层的头部);
5、过滤指定网卡的数据包
- -i:指定过滤的网卡接口,如果要查看所有网卡,可以 -i any;
6、过滤特定流向的数据包
- -Q:选择是入方向还是出方向的数据包,可选项有:in, out, inout;
7、其他常用参数
- -A:以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据;
- -l:基于行的输出,便于保存查看,或者交给其它工具分析;
- -q:简洁地打印输出。即打印很少的协议相关信息, 从而输出行都比较简短;
- -c:捕获 count 个包 tcpdump 就退出;
- -s:tcpdump默认只会截取前96字节的内容,要想截取所有的报文内容,可以使用 -s number,number就是你要截取的报文字节数,如果是0的话,表示截取报文全部内容。
- -S:使用绝对序列号,而不是相对序列号。
- -C:file-size,tcpdump在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size,如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录,新创建的文件名与-w选项指定的文件名一致, 但文件名后多了一个数字,该数字会从1开始随着新创建文件的增多而增加,file-size的单位是百万字节(这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576);
- -F:使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略;
8、对输出内容进行控制的参数
- -D:显示所有可用网络接口的列表;
- -e:每行的打印输出中将包括数据包的数据链路层头部信息;
- -E:揭秘IPSEC数据;
- -L:列出指定网络接口所支持的数据链路层的类型后退出;
- -Z:后接用户名,在抓包时会受到权限的限制。如果以root用户启动tcpdump,tcpdump将会有超级用户权限;
- -d:打印出易读的包匹配码;
- -dd:以C语言的形式打印出包匹配码
- -ddd:以十进制数的形式打印出包匹配码
9、抓包数据输出到文件
使用 tcpdump 工具抓到包后,往往需要再借助其他的工具进行分析,比如常见的 wireshark。而要使用wireshark,我们得将 tcpdump 抓到的包数据生成到文件中,最后再使用 wireshark 打开它即可。
使用 -w 参数后接一个以.pcap 后缀命令的文件名,就可以将 tcpdump 抓到的数据保存到文件中,比如:
tcpdump icmp -w icmp.pcap
选择将数据保存到文件中后,控制台上将无法显示数据。
10、从文件中读取抓包数据
使用 -w 是写入数据到文件,而使用 -r 是从文件中读取数据,比如:
tcpdump icmp -r all.pcap
读取文件也可使用参数过滤,比如:
tcpdump icmp -r all.pcap -A -s 0
五、过滤规则组合
Tcpdump可使用逻辑符号and(&&),or(||),not(!)进行过滤组合,比如需要抓一个来自10.5.2.3,发往任意主机的3389端口的包:
tcpdump src 10.5.2.3 and dst port 3389 或者
tcpdump src 10.5.2.3 && dst port 3389
在使用多个过滤器进行组合时,有可能需要用到括号,而括号在 shell 中是特殊符号,因此需要使用单引号或双引号将其包含。比如:
tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'或者
tcpdump "src 10.0.2.4 and (dst port 3389 or 22)"
六、常用命令示例
1、从eth0捕获数据包(若未指定,则一般是命令ifconfig展示的第一个接口)
tcpdump -i eth0
2、从eth0捕获5个数据包
tcpdump -c 5 -i eth0
3、从eth0捕获数据包,以ASCLL格式显示
tcpdump -A -i eth0
4、以16进制和ASCLL显示捕获的数据包
tcpdump -XX -i eth0
5、从eth0捕获数据包,不将IP转为域名
tcpdump -n -i eth0
6、从eth0捕获端口7777的数据包
tcpdump -i eth0 port 7777
7、从源ip/目标ip捕获数据包
tcpdump -i eth0 src 192.168.1.1
tcpdump -i eth0 dst 192.168.1.1
8、从eth0捕获数据包,抓取192.168.1.1与端口7777的包
tcpdump -i eth0 dst 192.168.1.1 and port 7777
9、抓取eth0全部报文内容,以16进制的格式将全部报文保存到文件中,保存的文件可用wireshark软件打开(打开网页192.168.1.1/asp/files.asp,可直接下载tcpdump.pcap)
tcpdump -i eth0 -s 0 -X -w /tmp/files/tcpdump.pcap
10、在eth0口抓取dhcp所有报文内容,并详细输出在屏幕
tcpdump -i eth0 -s 0 'udp and port 67 and port 68' -XX -vvv -nn
七、输出简析
1、输出内容结构
tcpdump 输出的内容虽然多,却很规律,下图是使用tcpdump -n -i br0抓取的一个随机包。
从上面的输出来看,可以总结出:
第一列:时分秒毫秒;
第二列:网络协议 IP;
第三列:发送方的ip地址+端口号,比如192.168.1.200.64068,192.168.1.200是IP地址,64068是端口号;
第四列:箭头 >,表示数据流向;
第五列:接收方的ip地址+端口号,比如192.168.1.1.23,192.168.1.1是ip地址,而23是端口号;
第六列:冒号;
第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,更多标识符在下一节介绍。
2、Flags 标识符
使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:
[S.] : SYN,发起连接标识(三次握手);
[P.] : PSH,传输数据标识(传输数据);
[F.] : FIN,关闭连接标识(四次挥手);
[R.] : RST,连接重置;
[.] : 没有Flag(意思是除上面四种类型外的其他情况,比如ACK)
八、常见抓包接口说明
1、eth0
eth0代表以太网网卡接口,全称Ethernet Adapter0,以太网接口与网卡对应,每个硬件网卡(一个MAC)对应一个以太网接口,通常连接公网,在我们设备路由器设备上通常指sim卡用dhcp方式拨号时创建的接口,有些模组显示为usb0,但含义是一样的。
2、lo
lo代表本地环回接口,全称loopback,回环(loopback)指将电子信号、数据流等原样送回发送者的行为。它主要用于对通信功能的测试。
3、br0
br0(bridge0)代表网桥接口,网桥是一种在链路层实现中继,对帧进行转发的技术,根据MAC分区块,可隔离碰撞,将网络的多个网段在数据链路层连接起来的网络设备。在我们路由器设备上通常指lan口。
4、ppp0
ppp0是sim卡使用PPP拨号时创建的链路接口,通常连接公网通信。
5、vlan0文章来源:https://www.toymoban.com/news/detail-481117.html
vlan0一般指虚拟局域网,在我们设备上通常指的是物理wan口。文章来源地址https://www.toymoban.com/news/detail-481117.html
到了这里,关于路由器抓包工具TCPDUMP使用方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!