tcpdump命令
tcpdump
一、tcpdump简介
linux抓包是通过注册一种虚拟的底层网络协议来完成对网络报文(准确的是网络设备)消息的处理权。当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,如以太网协议、x25协议处理模块来尝试进行报文的解析处理。
二、语法
1. 查看本地网卡情况
[root@zabbix ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33 1500 202 0 0 0 181 0 0 0 BMRU
lo 65536 13 0 0 0 13 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
Iface:存在的网卡。
MTU:最大传输单元。
RX-OK RX-ERR RX-DRP RX-OVR:正确接收数据报的数量以及发生错误、流式、碰撞的总数。
TX-OK TX-ERR TX-DRP TX-OVR:正确发送数据报的数量以及发生错误、流式、碰撞的总数。
2、tcpdump帮助命令
[root@test ~]# tcpdump --help
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips 26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
(1)、关键字
host:指明一台主机。如:host 10.1.110.110
net:指明一个网络地址,如:net 10.1.0.0
port:指明端口号:如:port 10050
(2)、确定方向的关键字
src:ip包的源地址,如:src 10.1.110.110
dst:ip包的目标地址。如:dst 10.1.110.110
(3)、协议的关键字(缺省是所有协议的信息包)
fddi、ip、arp、rarp、tcp、udp。
(4)、其它关键字
gateway、broadcast、less、greater。
(5)、常用表达式
! or not
&& or and
|| or or
三、例子
1、获取本地192.168.240.128访问。
[root@zabbix ~]# tcpdump host 192.168.240.128
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on virbr0, link-type EN10MB (Ethernet), capture size 262144 bytes
0 packets captured
0 packets received by filter
0 packets dropped by kernel
2、获取源(目的dst)地址192.168.240.133访问。
[root@zabbix ~]# tcpdump src host 192.168.240.133
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on virbr0, link-type EN10MB (Ethernet), capture size 262144 bytes
0 packets captured
0 packets received by filter
0 packets dropped by kernel
3、获取TCP协议 源(目的dst)地址192.168.240.133访问。
[root@zabbix ~]# tcpdump -i any tcp port 22 and src host 192.168.240.133
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
06:55:31.984789 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [S], seq 2366362196, win 29200, options [mss 1460,sackOK,TS val 1636996 ecr 0,nop,wscale 7], length 0
06:55:31.984993 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [.], ack 2723248058, win 229, options [nop,nop,TS val 1636997 ecr 1045999], length 0
06:55:31.985358 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [P.], seq 0:21, ack 1, win 229, options [nop,nop,TS val 1636997 ecr 1045999], length 21
06:55:31.991421 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [.], ack 22, win 229, options [nop,nop,TS val 1637003 ecr 1046005], length 0
06:55:31.991883 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [P.], seq 21:1517, ack 22, win 229, options [nop,nop,TS val 1637004 ecr 1046005], length 1496
06:55:31.994583 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [P.], seq 1517:1565, ack 1302, win 251, options [nop,nop,TS val 1637006 ecr 1046007], length 48
06:55:31.999068 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [P.], seq 1565:1581, ack 1666, win 271, options [nop,nop,TS val 1637011 ecr 1046011], length 16
06:55:32.039075 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [P.], seq 1581:1625, ack 1666, win 271, options [nop,nop,TS val 1637051 ecr 1046053], length 44
06:55:32.039480 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [P.], seq 1625:1685, ack 1710, win 271, options [nop,nop,TS val 1637051 ecr 1046053], length 60
06:55:34.088176 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [.], ack 1794, win 271, options [nop,nop,TS val 1639100 ecr 1048062], length 0
06:55:37.695509 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [P.], seq 1685:1769, ack 1794, win 271, options [nop,nop,TS val 1642707 ecr 1048062], length 84
06:55:39.570952 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [.], ack 1878, win 271, options [nop,nop,TS val 1644583 ecr 1053585], length 0
06:55:41.651693 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [F.], seq 1769, ack 1878, win 271, options [nop,nop,TS val 1646663 ecr 1053585], length 0
06:55:41.653396 IP 192.168.240.133.46688 > zabbix.com.ssh: Flags [.], ack 1879, win 271, options [nop,nop,TS val 1646665 ecr 1055667], length 0
^C
14 packets captured
14 packets received by filter
0 packets dropped by kernel
(1)基于IP地址过滤:host
#数据包的 ip 可以再细分为源ip和目标ip两种
[root@zabbix ~]# tcpdump host 192.168.10.100
(2) 基于网段进行过滤:net
#数据包的 ip 可以再细分为源ip和目标ip两种
[root@zabbix ~]# tcpdump net 192.168.10.0/24
(3)3.3 基于端口进行过滤:port
#端口同样可以再细分为源端口,目标端口
[root@zabbix ~]# tcpdump port 8088
(4) 基于协议进行过滤:proto
#常见的网络协议有:tcp, udp, icmp, http, ip,ipv6 等
[root@zabbix ~]# tcpdump -i any icmp -vv
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
06:53:00.278676 IP (tos 0x0, ttl 64, id 29426, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.240.133 > zabbix.com: ICMP echo request, id 2145, seq 1, length 64
06:53:00.278751 IP (tos 0x0, ttl 64, id 61977, offset 0, flags [none], proto ICMP (1), length 84)
zabbix.com > 192.168.240.133: ICMP echo reply, id 2145, seq 1, length 64
17 packets captured
20 packets received by filter
0 packets dropped by kernel
四、参数
##设置不解析域名提升速度
-n:不把ip转化成域名,直接显示 ip,避免执行 DNS lookups 的过程,速度会快很多
-nn:不把协议和端口号转化成名字,速度也会快很多。
-N:不打印出host 的域名部分.。比如,,如果设置了此选现,tcpdump 将会打印'nic' 而不是 'nic.ddn.mil'.
##过滤结果输出到文件
-w:加-w参数后接一个以 .pcap 后缀命令的文件名,就可以将 tcpdump 抓到的数据保存到文件中用wireshark打开。
##从文件中读取包数据
-r:是从文件中读取数据
##控制详细内容的输出
-v:产生详细的输出. 比如包的TTL,id标识,数据包长度,以及IP包的一些选项。同时它还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和。
-vv:产生比-v更详细的输出. 比如NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码。(摘自网络,目前我还未使用过)
-vvv:产生比-vv更详细的输出。比如 telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来(摘自网络,目前我还未使用过)
##控制时间的显示
-t:在每行的输出中不输出时间
-tt:在每行的输出中会输出时间戳
-ttt:输出每两行打印的时间间隔(以毫秒为单位)
-tttt:在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)
##显示数据包的头部
-x:以16进制的形式打印每个包的头部数据(但不包括数据链路层的头部)
-xx:以16进制的形式打印每个包的头部数据(包括数据链路层的头部)
-X:以16进制和 ASCII码形式打印出每个包的数据(但不包括连接层的头部),这在分析一些新协议的数据包很方便。
-XX:以16进制和 ASCII码形式打印出每个包的数据(包括连接层的头部),这在分析一些新协议的数据包很方便。
##过滤指定网卡的数据包
-i:指定要过滤的网卡接口,如果要查看所有网卡,可以 -i any
##过滤特定流向的数据包
-Q:选择是入方向还是出方向的数据包,可选项有:in, out, inout,也可以使用 --direction=[direction] 这种写法
##对输出内容进行控制的参数
-D : 显示所有可用网络接口的列表
-e : 每行的打印输出中将包括数据包的数据链路层头部信息
-E : 揭秘IPSEC数据
-L :列出指定网络接口所支持的数据链路层的类型后退出
-Z:后接用户名,在抓包时会受到权限的限制。如果以root用户启动tcpdump,tcpdump将会有超级用户权限。
-d:打印出易读的包匹配码
-dd:以C语言的形式打印出包匹配码.
-ddd:以十进制数的形式打印出包匹配码
##其他常用的一些参数
-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的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576)
-F:使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.

浙公网安备 33010602011771号