michellechouu 2019-10-21
一、抓包
拿到一个网络包时,我们总是希望它是尽可能小的。操作一个大包相当费时,有时甚至会死机。如果让初学者分析1GB以上的包,估计会被打击得信心全无。所以抓包时应该尽量只抓必要的部分。
1.只抓包头。一般能抓到的每个包的最大长度为1514字节,启用了Jumbo Frame(巨型帧)之后可达9000字节以上,而大多数时候我们只需要IP头或者TCP头就足够分析了。在Wireshark上可以这样抓到包头:单击菜单栏上的Capture-->Options,然后在弹出的窗口上定义“Limit each packet to”的值。我一般设个偏大的数字:80字节,也就是说每个包只抓前80字节。这样TCP层、网络层和数据链路层的信息都可以包括在内(见图1)。
图1
如果问题涉及应用层,就应该再加上应用层协议头的长度。如果你像我一样经常忘记不同协议头的长度,可以输入一个大点的值。即便设成200字节,也比1514字节小多了。
以上是使用Wireshark抓包时的建议。用tcpdump命令抓包时可以用“-s”参数达到相同效果。比如以下命令只抓eth0上每个包的前80字节,并把结果存到/tmp/tcpdump.cap文件中。[root@server_1 /]# tcpdump -i eth0 -s 80 -w /tmp/tcpdump.cap
2.只抓必要的包。服务器上的网络连接可能非常多,而我们只需要其中的一小部分。Wireshark的Capture Filter可以在抓包时过滤掉不需要的包。比如在成百上千的网络连接中,我们只对IP为10.1.1.1的包感兴趣,那就可以在Wireshark上这样设置:单击菜单栏上的Capture-->Options,然后在Capture Filter中输入“host 10.1.1.1”(见图2)。
图2
二、个性化设置
Wireshark的默认设置堪称友好,每个人的爱好各不相同,根据自己的喜好自己进行设置即可
1.我经常需要参照服务器上的日志时间,找到发生问题时的网络包。所以就把Wireshark的时间调成与服务器一样的格式。单击Wireshark的View-->Time Display Format-->Date and Time of Day,就可以实现此设置(见图3)。
图3
图3
2.不同类型的网络包可以自定义颜色,比如网络管理员可能会把TCP/UDP等协议相关的网络包设成最显眼的颜色。而文件服务器的管理员则更关心FTP、SMB和NFS协议的颜色。我们可以通过View -->Coloring Rules来设置颜色。如果同事已经有一套非常适合你工作内容的配色方案,可以请他从Coloring Rules窗口导出,然后导入到你的Wireshark里(见图4)。记得下次和他吃饭时主动买单,要知道配一套养眼的颜色可要花不少时间。
图4
3.更多的设置可以在Edit-->Preferences窗口中完成。这个窗口的设置精度可以达到一些协议的细节。比如在此窗口单击Protocols-->TCP就可以看到多个TCP相关选项,将鼠标停在每一项上都会有详细介绍。(图5)
图5
4.如果你在其他时区的服务器上抓包,然后下载到自己的电脑上分析,最好把自己电脑的时区设成跟抓包的服务器一样。这样,Wireshark显示的时间才能匹配服务器上日志的时间。比如说,服务器的日志显示2/13/2014 13:01:32有一个错误信息。那我们要在自己电脑上调整时区之后,才能到Wireshark上检查2/13/2014 13:01:32左右的包,否则就得先换算时间。
三、让wireshark自动分析
有些类型的问题,我们根本不需要研究包里的细节,直接交给Wireshark分析就行了。
1.单击Wireshark的Analyze-->Expert Info Composite,就可以在不同标签下看到不同级别的提示信息。比如重传的统计、连接的建立和重置统计,等等。在分析网络性能和连接问题时,我们经常需要借助这个功能。图6是TCP包的重传统计。
图6
2.单击Statistics-->TCP Stream Graph,可以生成几类统计图。比如我曾经用Time-Sequence Graph (Stevens)生成了图7。
图7