从项目中实际解析pcap数据得到的指标上来看,wait指标的输出值与我们的定义有些偏差,因此需要修改工具的wait指标计算方法,于是就借这次机会完整的读一下pcap2har这个工具;

1、一次完整的pcap文件->har文件解析过程主要分以下几个步骤:
1.1、pcap到tcpflows;
1)pcap文件解析出packet(作为tcp单一数据报文);
2)packet被加到tcpflow中对应socket(用pair<src,dst>代表socket)的packets集合中;
3)tcpflow触发merge_pkt行为,tcpflow中的packet按照socket的方向被分别加到fwd和rev的Direction中,fwd的Direction用来存放客户端发送的tcp报文,rev的Direction用来存放服务器的tcp响应报文;其中,在加入到Direction的过程中会进行重复packet的merge操作,去掉那些重复的tcp报文;
4)产出tcppflows的集合
1.2、tcpflows到httpflows到pairs<request,response>
1)解析单一tcpflow的tcpdir.fwd和tcpdir.rev为对应的pair<request,response>
2)产出httpflows的pairs(MessagePair(req,resp))
3)产出entries(entry = Entry(msg.request, msg.response))

1.3、网络指标的计算
connect_time = request.ts_start – request.ts_connect
send_time = request.ts_end – request.ts_start
wait_time = response.ts_start – request.ts_end
receive_time = response.ts_end – response.ts_start
dns_time 通过dpkt解析udpflows来获取

1.4、输出har文件

2、定制修改部分的需求
2.1、pcap2har工具中的wait指标指的是基础页request最后一个tcp报文(最后1个或者是最后第2个的tcp报文)时间点到接收到第一个response的tcp报文的时间点之差
细节详见:

2.2、项目中定义的wait指标指的是从第一个response的三次握手开始时间点到开始接收第一个response的数据的时间点,这两时间点之差;那么我们就需要记录下三次握手tcp报文的时间点ts
修改如下: