linux 网络管理之tcpdump命令详解

一、tcpdump的作用

tcpdump 是linux环境的网络数据采集分析工具, 也就是所谓的抓包工具,与tcpdump只有命令行格式不同,Windows有个图形可视化工具Wireshark
所谓的抓包工具就是从网络数据包中抓取我们需要的数据包,就需要定义一些过滤器,从庞大的网络流量中抓取符合条件的目标数据包,学习抓包工具的使用其实就是了解怎么定义和使用过滤规则

二、语法格式
[root@host114 home]# tcpdump -h
tcpdump version 4.9.3
libpcap version 1.9.1 (with TPACKET_V3)
OpenSSL 1.1.1k  FIPS 25 Mar 2021
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 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 ]

参数说明

-a #将网络地址和广播地址转变成名字
-A 以ASCII码方式显示每一个数据包
-b #数据链路层上选择协议,包括ip/arp/rarp/ipx都在这一层
-c 指定收取数据包的次数,在收到指定数量的数据包后退出tcpdump
-d 将匹配信息包的代码以人们能够理解的汇编格式输出
-dd  #将匹配信息包的代码以c语言程序段的格式输出
-ddd #将匹配信息包的代码以十进制的形式输出
-D #打印系统中所有可以监控的网络接口
-e 每行的打印信息包括数据链路层的头部信息
-f #将外部的Internet地址以数字的形式打印出来,即不显示主机名
-F #从指定的文件中读取表达式,忽略其他的表达式
-i 指定tcpdump 需要监听的接口
-l #使标准输出变为缓冲形式,可以数据导出到文件
-L #列出网络接口已知的数据链路
-n #不把网络地址转换为名字
-N 不输出主机名中的域名部分,例如www.baidu.com只输出www
-nn #不进行端口名称的转换
-P #不将网络接口设置为混杂模式
-q #快速输出,即只输出较少的协议信息
-r #从指定的文件中读取数据,一般是-w保存的文件
-w #将捕获到的信息保存到文件中,且不分析和打印在屏幕
-s #从每个组中读取在开始的snaplen个字节,而不是默认的68个字节
-S #将tcp的序列号以绝对值形式输出,而不是相对值
-T #将监听到的包直接解析为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议)
-t #在输出的每一行不打印时间戳
-tt #在每一行中输出非格式化的时间戳
-ttt #输出本行和前面以后之间的时间差
-tttt #在每一行中输出data处理的默认格式的时间戳
-u #输出未解码的NFS句柄
-v #输出稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv#输出相信的保报文信息
三、参数解析


图片来自网络,把过滤规则分为几类:按协议、按类型、按数据流向

  • 协议过滤:包括 tcp, udp, icmp, ip, ip6, arp, rarp,ether
  • 类型过滤:包括host, net, port, portrange
  • 流向过滤:包括src, dst
  • 还可以用以上几种类型组合成过滤条件:当用到多个过滤器进行过滤时,有可能用到括号,而括号在shell中是特殊符号,还需要在括号外添加引号
3.1 显示数据包的头部
  • -x:以16进制的形式打印每个包的头部数据(但不包括数据链路层的头部)
  • -xx:以16进制的形式打印每个包的头部数据(包括数据链路层的头部)
  • -X:以16进制和 ASCII码形式打印出每个包的数据(但不包括连接层的头部),这在分析一些新协议的数据包很方便。
  • -XX:以16进制和 ASCII码形式打印出每个包的数据(包括连接层的头部),这在分析一些新协议的数据包很方便。
3.2 控制时间的显示
  • -t:在每行的输出中不输出时间
  • -tt:在每行的输出中会输出时间戳
  • -ttt:输出每两行打印的时间间隔(以毫秒为单位)
  • -tttt:在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)
3.3 常用的逻辑表达式
  • 非 : ! or "not"
  • 且 : && or "and"
  • 或 : || or "or"
四、输出解析

输出实例

20:52:07.384759 IP 192.168.190.113.45020 > 439e3f58d19ff2d.samdom.znas.com.ssh: Flags [P.], seq 1405:1441, ack 2334348, win 9155, options [nop,nop,TS val 2882487051 ecr 3923644672], length 36
  • 第一列:抓包时间,如果在输出的每一行不打印时间戳,可以添加-t
  • 第二列:使用的网络协议
  • 第三列:源地址和端口号,可能是主机名或者IP地址
  • 第四列的箭头> :表示数据流向
  • 第五列:目的地址和端口号
  • 第6列:冒号
  • 第7列:剩余数据为数据包内容,包括Flags标识符号、seq序列号、ack号、Win窗口、以及最后表示的数据长度
Flag 标识
  • [S] : SYN(开始连接)
  • [P] : PSH(推送数据)
  • [F] : FIN (结束连接)
  • [R] : RST(重置连接)
  • [.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)
五、使用实例
  • tcpdump 默认抓取流经第一个网络接口的数据包
[root@host114 home]# tcpdump
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp2s1, link-type EN10MB (Ethernet), capture size 262144 bytes
20:58:50.538560 IP 439e3f58d19ff2d.samdom.znas.com.ssh > 192.168.190.113.45020: Flags [P.], seq 4119706794:4119707022, ack 374
5487054, win 304, options [nop,nop,TS val 3924048273 ecr 2882890622], length 228
20:58:50.538760 IP 192.168.190.113.45020 > 439e3f58d19ff2d.samdom.znas.com.ssh: Flags [.], ack 228, win 9155, options [nop,nop
,TS val 2882890652 ecr 3924048273], length 0
  • tcpdump -i 网络接口 抓取流经指定网络接口的数据包
[root@host114 home]# tcpdump -i enp2s1
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp2s1, link-type EN10MB (Ethernet), capture size 262144 bytes
20:59:29.768941 IP 10.229.37.245.57553 > 228.0.168.245.ha-cluster: UDP, length 202
20:59:29.775424 IP 439e3f58d19ff2d.samdom.znas.com.48620 > 192.168.190.129.49159: Flags [P.], seq 114548774:114548942, ack 298
308690, win 253, options [nop,nop,TS val 3618941989 ecr 52696109], length 168
20:59:29.776702 IP 192.168.190.129.49159 > 439e3f58d19ff2d.samdom.znas.com.48620: Flags [P.], seq 1:217, ack 168, win 513, opt
ions [nop,nop,TS val 52700349 ecr 3618941989], length 216
20:59:29.776767 IP 439e3f58d19ff2d.samdom.znas.com.48620 > 192.168.190.129.49159: Flags [.], ack 217, win 261, options [nop,no
p,TS val 3618941991 ecr 52700349], length 0
  • tcpdump host 指定IP 抓取流经指定IP的数据包,此时默认是流经当前主机第一个网络接口的数据包,示例是enp2s1
[root@host114 home]# tcpdump host 192.168.190.126
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp2s1, link-type EN10MB (Ethernet), capture size 262144 bytes
21:01:32.179594 IP 192.168.190.126.55203 > 439e3f58d19ff2d.samdom.znas.com.ctdb: Flags [S], seq 636612926, win 29200, options
[mss 1460,sackOK,TS val 1754330146 ecr 0,nop,wscale 7], length 0
21:01:32.179659 IP 439e3f58d19ff2d.samdom.znas.com.ctdb > 192.168.190.126.55203: Flags [R.], seq 0, ack 636612927, win 0, leng
th 0
  • tcpdump host 192.168.190.126 -X -X以十六进制和ASCII格式显示数据包的头部
09:36:31.833101 IP BHBGSTOR01.58048 > 10.2.32.11.ldap: UDP, length 104
	0x0000:  4500 0084 8e77 4000 4011 5857 0a02 1f8c  E....w@.@.XW....
	0x0010:  0a02 200b e2c0 0185 0070 541c 3066 0203  .........pT.0f..
	0x0020:  008b 9363 5f04 000a 0100 0a01 0002 0100  ...c_...........
	0x0030:  0201 0001 0100 a040 a30d 0405 4e74 5665  .......@....NtVe
	0x0040:  7204 0406 0000 00a3 2204 0944 6e73 446f  r......."..DnsDo
	0x0050:  6d61 696e 0415 4342 4842 2e52 4f4f 542e  main..CBHB.ROOT.
	0x0060:  4342 4842 414e 4b2e 4e45 54a3 0b04 0341  CBHBANK.NET....A
	0x0070:  4143 0404 0000 0000 300a 0408 4e65 744c  AC......0...NetL
	0x0080:  6f67 6f6e                                ogon
  • 条件组合过滤抓包 多个条件组合,括号外须用引号
tcpdump  '((tcp) and (port 80) and ((dst 192.168.190.113) or (dst host 192.168.1.1)))'
六、参考资料
posted @ 2023-03-15 09:21  枫叶艾辰  阅读(163)  评论(0编辑  收藏  举报