【性能】怎么使用 tcpdump 抓包分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【性能】怎么使用 tcpdump 抓包分析相关的知识,希望对你有一定的参考价值。
参考技术A tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
时间戳 协议 源地址. 源端口 > 目的地址. 目的端口 网络包详细信息
为了帮你更快上手 tcpdump 的使用,我在这里也帮你整理了一些最常见的用法,并且绘制成了表格,你可以参考使用。
首先,来看一下常用的几个选项。在上面的 ping 案例中,我们用过 -nn 选项,表示不用对 IP 地址和端口号进行名称解析。
我们再来看常用的过滤表达式。刚刚用过的是 udp port 53 or host 35.190.27.188 ,表示抓取 DNS 协议的请求和响应包,以及源地址或目的地址为 35.190.27.188 的包。
什么是 PCAP 文件扩展名?
https://www.filedesc.com/zh/file/pcap
https://www.solvusoft.com/zh-cn/file-extensions/file-extension-pcap
tcpdump(8) - Linux man page
https://linux.die.net/man/8/tcpdump
A tcpdump Tutorial with Examples — 50 Ways to Isolate Traffic
https://danielmiessler.com/study/tcpdump
tcpdump抓包工具的基本使用
为了更好的深入理解计算机网络等相关知识,例如TCPUDPIP等,我们就必须利用tcpdump、Wireshark等工具对网络进行分析。本篇博文主要记录一下tcpdump这个网络分析利器的一些基本使用方法。
目录
1.tcpdump与wireshark的区别
2.tcpdump的基本使用
参考:
1.tcpdump与wireshark的区别
tcpdump 和 Wireshark 两者都是最常用的网络抓包和分析工具,当通信没有被加密的时候,可以用来抓取和读取数据包,同时更是分析网络性能必不可少的利器。
- tcpdump 仅支持命令行格式使用,常用在 Linux 服务器中抓取和分析网络包。
- Wireshark 除了可以抓包外,还提供了可视化分析网络包的图形页面。
所以,这两者实际上是可以搭配使用的,先用 tcpdump 命令在 Linux 服务器上抓包,接着把抓包的文件拖出到 Windows 电脑后,用 Wireshark 可视化分析。如果你能接受在黑框内文字分析相关协议的意思,那么直接使用tcpdump即可(无需在Wireshark上进行分析)。
当然,如果你是在 Windows 上抓包,只需要用 Wireshark 工具就可以。
2.tcpdump的基本使用
使用 tcpdump
抓包,需要管理员权限,因此下面的示例中绝大多数命令都是以 sudo
开头,或者先切换到 root 用户(sudo -i).
(1) 指定网络接口
tcpdump -i eth0
通常情况下,如果不指定网络接口, tcpdump
在运行时会选择编号最低的网络接口,也就是你的网卡,可以通过 ifconfig 指令查看自己系统的网卡信息。或者通过tcpdump -D命令列出可以抓包的网络接口。
如上所示,本机采用的是第一个名为ens33的网络接口
如上所示,可以看到我的机器中所有可以抓包的网络接口。其中特殊接口 any
可用于抓取所有活动的网络接口的数据包。
到此成功指定了我们需要抓包分析的网络接口,但是对于tcpdump输出的内容我们目前还不了解,不要急,接着往下看带你解密。
(2)理解tcpdump抓取的数据
tcpdump
能够抓取并解码多种协议类型的数据报文,如 TCP、UDP、ICMP 等等。虽然这里我们不可能介绍所有的数据报文类型,但可以分析下 ICMP 类型的数据报文,来帮助你入门。为什么采用ICMP,因为我们可以通过PING指令来观察数据包情况,而ping指令就是依据ICMP协议。
tcpdump 协议名
利用ping指令ping百度网址来理解tcpdump抓取的数据。
运行ping指令后tcpdump的抓取的结果如下:
熟悉icmp协议的人应该知道echo reques以及echo reply的含义,如果不知道可以参考我的博客。
具体的字段根据不同的报文类型会有不同,但上面这个例子是一般的格式形式。
- 第一个字段23:21:30.090166:该数据报文被抓取的系统本地时间戳。
第二个字段:IP
是网络层协议类型,这里是IPv4
,如果是IPv6
协议,该字段值是IP6
- 第三个字段:源 ip 地址和端口号
- 第四个字段:目的 ip 地址和其端口号
- 最后几个字段:就是icmp报文对应的的内容
(3) 不转换主机名、端口号等
tcpdump -nn
在上面示例中,tcpdump
默认是将 IP 地址和端口号解析为对应的接口名(显示www.baidu.com而不是显示百度的IP地址)。而通常在网络故障排查中,使用 IP 地址和端口号更便于分析问题;用 -n
选项显示 IP 地址,-nn
选项显示端口号:
(4)增加详细信息
tcpdump -v(最多可以跟随3个v)
增加一个简单 -v
标记,输出会包含更多信息,例如一个 IP 包的生存时间(ttl, time to live)、长度和其他的选项。
tcpdump
的详细信息有三个等级,你可以通过在命令行增加 v 标记的个数来获取更多的信息。
(5) 限制抓包数量
tcpdump -c num
如上所示,tcpdump
在抓取 1 个数据包后自动停止了抓包。这在有些场景中十分有用 —— 比如你只需要抓取少量的数据包用于分析。当我们需要使用过滤规则抓取特定的数据包(如下所示)时,-c
的作用就十分突出了。
(6) 保存抓包的信息
tcpdump -w /path/to/file
但很多时候,你希望把 tcpdump
的输出结果保存在文件中,最简单的方法就是利用 -w
标记。如果你后续还会检查这些网络数据,这样做就特别有用。
(7) 读取保存的抓包信息
tcpdump -r /path/to/file
以上只是tcpdump命令的基本使用,有关tcpdump更多的操作与信息可以访问man手册。
man tcpdump
以上是关于【性能】怎么使用 tcpdump 抓包分析的主要内容,如果未能解决你的问题,请参考以下文章