当前位置: 首页 > 科技观察

Wireshark抓包、丢包分析?_0

时间:2023-03-13 07:21:19 科技观察

前言我们都知道一般的流量分析设备都支持pcap回放离线分析的功能,但是如果抓到的pcap丢包,会影响到最终安全测试的效果。比如比赛站点需要提供pcap包的检测功能来检测恶意文件。如果pcap丢包,文件恢复可能会失败,最终恶意文件检测功能“生效”。那么问题来了,我们如何识别pcap包是否有丢包呢?接下来,我们使用wireshark在pcap文件中寻找丢包线索。完全的?数据包丢失?思路一:通过现象看现象。在实际网络分析场景中,尤其是传输大文件时,经常会发现大文件已经传输给对端,但是pcap中出现丢包。为什么是这样?网络数据包真的完整的传送给了对端吗?毫无疑问,对端已经收到了完整的文件,数据包肯定已经传给了对端。那为什么wireshark中的pcap包会丢失呢?下面我们就来看看wireshark的抓包原理吧!在Linux操作系统中,wireshark抓包是基于libpcap的,tcpdump底层也是基于libpcap的。关于tcpdump底层的收包原因在tcpdump中已经分析过了?网卡层面的流程和入口本文已经分析过了,这里不再赘述。由此我们可以明确,造成上述现象的原因并不是网卡丢包,因为网卡层面的丢包肯定会影响文件数据的完整性。因此,如果排除wireshark错误使用导致的丢包,也有可能是以下过程丢包:通过deliver_skb进入packet_rcv阶段,packet_rcv将接收到的skb放入当前packetsocketbuffer,应用层调用recvfrom将buffer中的数据包复制到应用层,从而实现libpcap收包,大致流程如图1所示:图1:libpcap收包流程所以我们可以断定,wireshark丢包的原因可能是be:packetsocketbuffer已满导致丢包;copyfrombufferto异常的应用层中断导致丢包。当然,排除以上两种情况,也有可能是多路径网络结构让属于同一个TCP会话的数据包通过不同的网络接口,导致wireshark抓到的数据包不完整。但是在我们日常的流量分析工作中,往往会根据对端是否有完整的数据包来判断wireshark抓到的数据包是否完整。这样做可能会严重影响安全测试的效率。有没有办法快速分析pcap包是否丢包?答案是肯定的,利用wireshark的专家信息可以快速分析丢包的影响。丢包线索思路二:透过本质看现象。打开wireshark,点击工具栏中的“Analyze->ExpertInformation”,如图1、图2所示:图1:Wireshark的专家信息所在Wireshark的专家信息提供四种类型:错误、警告、注意、对话信息,任意一种可以选择定位特定的数据包。图2:Wireshark的丢包告警1图3:Wireshark的丢包告警2专家信息中的哪些信息提示了丢包的线索?Ackedsegmentthatwasn'tcapture(commonatcapturestart),asshowninFigure2Shown:表明这个数据包已经确认了未捕获的数据。传输正常,接收方已确认,但Wireshark在抓包数据中找不到某个包。这通常发生在捕获设备速度不够快的情况下,例如libpcap的接收缓冲区已满,或者缓冲区复制到应用层的时候造成的丢包。TCPPrevioussegmentnotcaptured,如图3所示:表示如果数据包N标记上一个没有被捕获的数据段,则说明捕获中没有来自同一个TCP会话的数据包,其[seq+length≠packetN'sseq]。最典型的原因是数据包丢失或延迟开始捕获,但也可能是发送方的TCP堆栈有问题,或者是多路径网络结构允许属于同一TCP会话的数据包通过不同的网络接口,导致数据包实际到达目的地,但未被Wireshark捕获。结语1句忠告:不能通过判断数据包是否被接收端接收来判断pcap是否丢包。1小提示:通过wireshark的专家信息可以快速定位判断pcap丢包。4经验:wireshark丢包可能有4种原因。①数据包socket的缓冲区已满,导致丢包;④也有可能是多路径网络结构让属于同一个TCP会话的数据包通过不同的网络接口,导致wireshark抓到的数据包不完整。