专栏名称: 云技术实践
关注云计算,云技术,云运维,云存储,存储,分布式,OpenStack,SDN,Ceph,虚拟化,运维,分享在云计算/虚拟化/运维项目实施中的资讯、经验、技术,坚持干货。
目录
相关文章推荐
美团技术团队  ·  可信实验白皮书系列04:随机轮转实验 ·  4 天前  
美团技术团队  ·  可信实验白皮书系列03:随机对照实验 ·  4 天前  
51好读  ›  专栏  ›  云技术实践

在Linux命令行中使用tcpdump「超详细」

云技术实践  · 公众号  · 架构  · 2018-10-13 19:55

正文

请到「今天看啥」查看全文


: 30.247048 IP rhel75.33696 > gateway.domain: 37429 + PTR? 28.64.168.192.in-addr.arpa. ( 44 )
5 packets captured
12 packets received by filter
0 packets dropped by kernel
$


在这种情况下,tcpdump在捕获五个数据包后自动停止捕获。这在不同的场景中很有用,例如,如果正在排除连接并捕获一些初始包就足够了。当我们应用过滤器捕获特定数据包时,这甚至更有用(如下所示)。


默认情况下,tcpdump将IP地址和端口解析为名称,如上例所示。在排除网络问题时,通常更容易使用IP地址和端口号;使用选项-n和端口解析与-nn禁用名称解析:


$ sudo tcpdump -i any -c5 -nn
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
23 : 56 : 24.292206 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [ P. ] , seq 166198580 : 166198776 , ack 2414541257 , win 309 , options [nop , nop ,TS val 615664 ecr 540031155 ] , length 196
23 : 56 : 24.292357 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [ . ] , ack 196 , win 1377 , options [nop , nop ,TS val 540031229 ecr 615664 ] , length 0
23 : 56 : 24.292570 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [ P. ] , seq 196 : 568 , ack 1 , win 309 , options [nop , nop ,TS val 615664 ecr 540031229 ] , length 372
23 : 56 : 24.292655 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [ . ] , ack 568 , win 1400 , options [nop , nop ,TS val 540031229 ecr 615664 ] , length 0
23 : 56 : 24.292752 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [ P. ] , seq 568 : 908 , ack 1 , win 309 , options [nop , nop ,TS val 615664 ecr 540031229 ] , length 340
5 packets captured
6 packets received by filter
0 packets dropped by kernel


如上所示,捕获输出现在显示IP地址和端口号。这还可以防止tcpdump发出DNS查找,这有助于在排除网络问题时降低网络流量。


现在已经能够捕获网络数据包了,让我们来探索一下这些输出意味着什么。


3.了解输出格式

Tcpdump能够捕获和解码许多不同的协议,例如TCP,UDP,ICMP等等。虽然我们不能在这里介绍所有这些,但为了帮助入门,让我们探索TCP数据包。可以在tcpdump的手册页中找到有关不同协议格式的更多详细信息。tcpdump捕获的典型TCP数据包如下所示:


08:41:13.729687 IP 192.168.64.28.22 > 192.168.64.1.41916: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 372


字段可能会根据发送的数据包类型而有所不同,但这是一般格式。


第一个字段08:41:13.729687表示根据本地时钟接收的数据包的时间戳。


接下来,IP表示网络层协议 - 在这种情况下是IPv4。对于IPv6数据包,值为IP6。


下一个字段192.168.64.28.22是源IP地址和端口。接下来是目标IP地址和端口,由192.168.64.1.41916表示。


在源和目标之后,可以找到TCP 标记 [P.]。 该字段的典型值包括:


标记类型 描述
S SYN 连接开始
F FIN 连接结束
P PUSH 数据 push
R RST 连接重置
. ACK 确认


该字段也可以是这些值的组合,例如用于SYN-ACK分组的[S.]。


接下来是数据包中包含的数据的序列号。对于捕获的第一个数据包,这是一个绝对数字。后续数据包使用相对数字,以便更容易遵循。在该示例中,序列是seq 196:568,这意味着该分组包含该流的字节196到568。


接下来是Ack编号:ack 1.在这种情况下,它是1,因为这是发送数据的一方。对于接收数据的一方,该字段表示该流上的下一个预期字节(数据)。例如,此流程中下一个数据包的Ack编号为568。


下一个字段是窗口大小win 309,它表示接收缓冲区中可用的字节数,后跟TCP选项,例如MSS(最大段大小)或窗口比例。有关TCP协议选项的详细信息,请参阅传输控制协议(TCP)参数。


最后,我们有数据包长度,长度372,它表示有效载荷数据的长度(以字节为单位)。长度是序列号中最后一个字节和第一个字节之间的差值。


现在让我们学习如何过滤包以缩小结果范围,并更轻松地解决特定问题。


4.过滤数据包

如上所述,tcpdump可以捕获太多的软件包,其中一些甚至与正在排除故障的问题无关。 例如,如果正在解决与Web服务器的连接问题,那么对SSH流量不感兴趣,因此从输出中删除SSH数据包可以更轻松地处理真正的问题。


tcpdump最强大的功能之一是它能够使用各种参数过滤捕获的数据包,例如源和目标IP地址,端口,协议等。让我们看看一些最常见的参数。


协议

要根据协议过滤数据包,请在命令行中指定协议。例如,仅使用以下命令捕获ICMP数据包:


$ sudo tcpdump -i any -c5 icmp
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


在另一个终端中,尝试ping另一台机器:

$ ping opensource.com
PING opensource.com ( 54.204.39.132 ) 56 ( 84 ) bytes of data.
64 bytes from ec2- 54 - 204 - 39 - 132 .compute- 1 .amazonaws.com ( 54.204.39.132 ) : icmp_seq = 1 ttl = 47 time = 39.6 ms


回到tcpdump捕获,请注意tcpdump仅捕获并显示与ICMP相关的数据包。在这种情况下,tcpdump不显示解析名称opensource.com时生成的名称解析数据包:


09: 34 : 20.136766 IP rhel75 > ec2- 54 - 204 - 39 - 132 .compute- 1 .amazonaws.com: ICMP echo request, id 20361 , seq 1 , length 64
09: 34 : 20.176402 IP ec2- 54 - 204 - 39 - 132 .compute- 1 .amazonaws.com > rhel75: ICMP echo reply, id 20361 , seq 1 , length 64
09: 34 : 21.140230 IP rhel75 > ec2- 54 - 204 - 39 - 132 .compute- 1 .amazonaws.com: ICMP echo request, id 20361 , seq 2 , length 64
09: 34 : 21.180020 IP ec2- 54 - 204 - 39 - 132 .compute- 1 .amazonaws.com > rhel75: ICMP echo reply, id 20361 , seq 2 , length 64
09: 34 : 22.141777 IP rhel75 > ec2- 54 - 204 - 39 - 132 .compute- 1 .amazonaws.com: ICMP echo request, id 20361 , seq 3 , length 64
5 packets captured
5 packets received by filter
0 packets dropped by kernel


主机

使用主机过滤器将捕获限制为仅限与特定主机相关的数据包


$ sudo tcpdump -i any -c5 -nn host 54.204.39.132
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
09: 54 : 20.042023 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [ S ] , seq 1375157070 , win 29200 , options [ mss 1460 ,sackOK,TS val 122350391 ecr 0 , nop ,wscale 7 ] , length 0
09: 54 : 20.088127 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [ S. ] , seq 1935542841 , ack 1375157071 , win 28960 , options [ mss 1460 ,sackOK,TS val 522713542 ecr 122350391 , nop ,wscale 9 ] , length 0
09: 54 : 20.088204 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [ . ] , ack 1 , win 229 , options [nop , nop ,TS val 122350437 ecr 522713542 ] , length 0
09: 54 : 20.088734 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [ P. ] , seq 1 : 113 , ack 1 , win 229 , options [nop , nop ,TS val 122350438 ecr 522713542 ] , length 112 : HTTP: GET / HTTP / 1.1
09: 54 : 20.129733 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [ . ] , ack 113 , win 57 , options [nop , nop ,TS val 522713552 ecr 122350438 ] , length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel


在此示例中,tcpdump仅捕获并显示与主机54.204.39.132之间的数据包。


端口

要根据所需的服务或端口过滤数据包,请使用端口过滤器。例如,使用以下命令捕获与Web(HTTP)服务相关的数据包:


$ sudo tcpdump -i any -c5 -nn port 80
tcpdump: verbose output suppressed, use -v or -vv







请到「今天看啥」查看全文


推荐文章
美团技术团队  ·  可信实验白皮书系列04:随机轮转实验
4 天前
美团技术团队  ·  可信实验白皮书系列03:随机对照实验
4 天前
投行圈  ·  IPO实务┃61例IPO被否原因汇编
8 年前
一本黑  ·  讲讲小密圈
7 年前
大家-腾讯新闻  ·  龍昇:1960年代,人们怎么花外汇券
7 年前
汽车消费网  ·  为什么很多人买车选白色?原因有4个
7 年前