最近在做一些基于TCP协议的项目。和其他接口方调试时经常会出现不一致的情况,程序日志也无法完整保证公平,所以只能通过tcpdump抓包来排查问题。.因为是自定义协议,只能用wireshark解析成16进制报文,不方便查看,而且相关插件的实现需要C++或LUA语言,本人很少接触,所以,只能暂时使用Python写个程序来分析~首先我们需要安装相应的依赖:pipinstalldpkt我们用tcpdump或者wireshark抓取相应的内容后,保存为tcp-log.pcap文件,然后我们就可以分析了(以下代码基于Python3):importdpktimportsocketfile='tcp-log.pcap'withopen(file,'rb')asfr:pcap=dpkt.pcap.Reader(fr)fortimestamp,bufferinpcap:ethernet=dpkt。ethernet.Ethernet(buffer)#ifnotisinstance(ethernet.data,dpkt.ip.IP):continueip=ethernet.dataifnotisinstance(ip.data,dpkt.tcpuetincontinue.TCP):tcp=ip.data#过滤掉内容为空的数据包iflen(tcp.data)==0:Continue#发送方的IPsrc=socket.inet_ntoa(ip.src)#接收方的IPaetin=net_ockdst(ip.dst)#消息内容(字节数组)byteArray=tcp.data#TODO根据自定义协议内容解析字节数组
