如果源服务器在访问目标服务器时出现丢包、延时等异常,您可以通过抓包获取最原始的网络交互数据,以便进一步排查问题。本文将介绍在Linux和Windows环境下使用抓包工具进行抓包的具体方法。
抓包流程介绍
在网络异常情况下,抓取数据包是定位问题的重要手段之一。抓包操作通常包括以下流程步骤。
上述流程中涉及的关键要点说明如下。
序号 | 流程名称 | 说明 |
序号 | 流程名称 | 说明 |
1 | 明确问题现象 | 明确问题现象时,可以使用ping,traceroute等工具来初步分析判断是否存在如下现象。
|
2 | 选择合适的抓包工具 | 根据您的需求、硬件以及软件环境,选择合适的抓包工具。
|
3 | 安装并配置抓包工具 | 在执行抓包操作之前,建议您结合自己的实际抓包需求,为抓包工具配置过滤条件,以提高抓包效率。 |
4 | 执行抓包操作 | 执行抓包操作前,您需要明确如下信息。
|
5 | 分析抓包数据 | 对抓包数据进行分析,以下为一些常见的分析方向。
|
6 | 解决问题并验证 | 在对抓包数据进行分析后,如果无法准确定位问题,您可以结合其他工具或方法以进一步排查。
|
Linux实例中使用tcpdump工具
本文将以在Linux实例中运用tcpdump工具进行数据包捕获与分析为例,为您介绍如何进行网络数据包抓取。大多数Linux发行版已预装该工具。如果未安装,您可以通过软件包管理工具(如apt或yum)安装该工具。具体操作,请参见使用包管理工具管理软件。
使用说明
有关tcpdump命令格式说明如下。
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ] [ --count ] [ -C file_size ]
[ -E spi@ipaddr algo:secret,... ]
[ -F file ] [ -G rotate_seconds ] [ -i interface ]
[ --immediate-mode ] [ -j tstamp_type ] [ -m module ]
[ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ --version ]
[ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]
[ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --micro ] [ --nano ]
[ expression ]
上述命令中,常用的参数用法及说明如下表所示。
参数 | 用法及说明 |
参数 | 用法及说明 |
-s | 用于设置数据包抓取长度。如果-s为0,则表示自动选择合适的长度来抓取数据包。 |
-w | 用于将抓包结果导出到文件,而不是在控制台进行分析和打印输出。 |
-i | 用于指定需要监听的接口(网卡)。 |
-vvv | 用于输出详细的交互信息。 |
expression | 是一个正则表达式,用于过滤报文,主要包含如下几类:
|
更多关于tcpdump工具的其他参数及使用说明,请参见tcpdump man page。
使用示例
有关tcpdump
命令的常见用法及示例输出信息如下所示。
抓取指定接口及端口的数据包。
执行以下命令,抓取eth0网卡22端口的交互数据,并在控制台输出交互信息。
tcpdump -s 0 -i eth0 port 22
在抓取过程中,将实时显示交互数据。用户可通过按下
Ctrl
+C
键停止抓取。停止后,将显示本次数据抓取的信息摘要。tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 20:24:59.414951 IP 172.xx.xx.226.ssh > 42.xx.xx.107.43414: Flags [P.], seq 442372:442536, ack 53, win 141, length 164 20:24:59.415002 IP 172.xx.xx.226.ssh > 42.xx.xx.107.43414: Flags [P.], seq 442536:442700, ack 53, win 141, length 164 20:24:59.415052 IP 172.xx.xx.226.ssh > 42.xx.xx.107.43414: Flags [P.], seq 442700:442864, ack 53, win 141, length 164 20:24:59.415103 IP 172.xx.xx.226.ssh > 42.xx.xx.107.43414: Flags [P.], seq 442864:443028, ack 53, win 141, length 164
抓取指定接口及端口的数据包,并输出详细交互信息。
执行以下命令,抓取eth1网卡发送给22端口的交互数据,并在控制台输出详细交互信息。
tcpdump -s 0 -i eth1 -vvv port 22
在抓取过程中,将实时显示交互数据。用户可通过按下
Ctrl
+C
键停止抓取。停止后,将显示本次数据抓取的信息摘要。tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 15:45:54.817920 IP (tos 0x10, ttl 64, id 61958, offset 0, flags [DF], proto TCP (6), length 172) iZr1ulp9t4u4a8Z.ssh > 123.xxx.xxx.74.2057: Flags [P.], cksum 0x80cd (incorrect -> 0x2ee9), seq 890113592:890113724, ack 2345612678, win 592, length 132 15:45:54.894215 IP (tos 0x14, ttl 116, id 16850, offset 0, flags [DF], proto TCP (6), length 40) 123.139.88.74.2057 > iZr1ulp9t4u4a8Z.ssh: Flags [.], cksum 0x1e6a (correct), seq 1, ack 132, win 1021, length 0 15:45:54.913403 IP (tos 0x10, ttl 64, id 61959, offset 0, flags [DF], proto TCP (6), length 172) iZr1ulp9t4u4a8Z.ssh > 123.xxx.xxx.74.2057: Flags [P.], cksum 0x80cd (incorrect -> 0x1105), seq 132:264, ack 1, win 592, length 132 15:45:54.988025 IP (tos 0x10, ttl 64, id 61960, offset 0, flags [DF], proto TCP (6), length 236) iZr1ulp9t4u4a8Z.ssh > 123.xxx.xxx.74.2057: Flags [P.], cksum 0x810d (incorrect -> 0x98d1), seq 264:460, ack 1, win 592, length 196
抓取指定接口及IP地址的特定协议数据包。
执行以下命令,抓取eth0网卡与指定IP地址的ping交互数据,并在控制台输出详细交互信息。
tcpdump -s 0 -i eth0 -vvv dst 123.xxx.xxx.74 and icmp
在抓取过程中,将实时显示交互数据。用户可通过按下
Ctrl
+C
键停止抓取。停止后,将显示本次数据抓取的信息摘要。tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 15:43:29.116058 IP (tos 0x14, ttl 64, id 26185, offset 0, flags [none], proto ICMP (1), length 60) iZr1ulp9t4u4a8Z > 123.xxx.xxx.74: ICMP echo reply, id 2048, seq 65, length 40 15:43:30.129600 IP (tos 0x14, ttl 64, id 27043, offset 0, flags [none], proto ICMP (1), length 60) iZr1ulp9t4u4a8Z > 123.xxx.xxx.74: ICMP echo reply, id 2048, seq 66, length 40 15:43:31.141576 IP (tos 0x14, ttl 64, id 27201, offset 0, flags [none], proto ICMP (1), length 60) iZr1ulp9t4u4a8Z > 123.xxx.xxx.74: ICMP echo reply, id 2048, seq 67, length 40 15:43:32.153912 IP (tos 0x14, ttl 64, id 27802, offset 0, flags [none], proto ICMP (1), length 60) iZr1ulp9t4u4a8Z > 123.xxx.xxx.74: ICMP echo reply, id 2048, seq 68, length 40
抓取数据包并保存至指定文件。
运行如下命令,抓取系统内所有接口数据并保存至指定文件。
tcpdump -i any -s 0 -w test.cap
回显信息示例如下,表明正在进行数据包抓取。
tcpdump: data link type LINUX_SLL2 tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
如需停止抓取,请按下
Ctrl
+C
键。停止后,将显示本次数据抓取的信息摘要。^C97 packets captured 127 packets received by filter 0 packets dropped by kernel
查看生成的抓包数据文件的内容。
执行以下命令,查看tcpdump生成的抓包数据文件的内容。
tcpdump -r test.cap
您也可以选择使用Wireshark工具查看tcpdump生成的抓包文件。具体操作,请参见通过Wireshark查看抓包文件。
Windows实例中使用Wireshark工具
本文将以在Windows实例中运用Wireshark工具进行数据包捕获与分析为例,为您介绍如何进行网络数据包抓取。
使用说明
安装并打开Wireshark工具。
访问Wireshark官方网站,获取安装包并完成Wireshark工具的安装。
选择捕获 > 选项。
在Wireshark 捕获选项页面,根据接口名称或对应的IP地址选择需要进行抓包的网卡,然后单击开始。
抓取足量数据包后,选择捕获 > 停止。
选择文件 > 保存,将抓包结果保存到指定文件。
(可选)如需通过Wireshark查看抓包文件,请在Wireshark主界面的菜单栏中单击文件 > 打开,并选择相应的抓包文件进行查看。
更多有关Wireshark工具的使用和数据分析方法,请参见Wireshark官方网站。
相关文档
关于能ping通实例但是端口不通的问题处理方法,请参见能ping通ECS实例但端口不通的排查方法。
关于使用MTR工具进行网络链路分析的相关操作,请参见使用MTR工具进行网络链路分析。
- 本页导读 (1)
- 抓包流程介绍
- Linux实例中使用tcpdump工具
- 使用说明
- 使用示例
- Windows实例中使用Wireshark工具
- 使用说明
- 相关文档