1 def get_protocol_info_from_pcap(pcapfile): 2 pcap = PcapFile(pcapfile) 3 start = time.time() 4 pkts = {} 5 for p in pcap.tcp_udp_packets(): 6 l3 = p.L3_protocol 7 if pkts.has_key(l3): 8 l3pkts = pkts[l3] 9 l3pkts.append(p.length) 10 pkts[l3] = l3pkts 11 else: 12 pkts[l3] = [p.length] 13 total = 0 14 pcap.close() 15 formatstr = "{0[0]:>12}{0[1]:>11}{0[2]:>15}{0[3]:>8}{0[4]:>15}{0[5]:>10}{0[6]:>15}" 16 total_p = 0 17 total_b = 0 18 for i, j in pkts.items(): 19 total_b += sum(j) 20 total_p += j.__len__() 21 22 print "-" * 100 23 print pcapfile 24 print "" 25 print formatstr.format(["protocol_num", "protocol", "total_packets", "rate", "total_bytes", "rate", "aver_pkt_len"]) 26 for i, j in pkts.items(): 27 bytes_percent = "%.1f%%" % (sum(j) * 100.0 / total_b) 28 pkts_percent = "%.1f%%" % (j.__len__() * 100.0 / total_p) 29 print formatstr.format( 30 [i, Protocol.l3_protocols[i], j.__len__(), pkts_percent, sum(j), bytes_percent, sum(j) / j.__len__()]) 31 print formatstr.format(["", "Total", total_p, "", total_b, "", total_b / total_p]) 32 end = time.time() 33 print "" 34 print "time cost: %s" % (end - start) 35 print "-" * 100 36 print ""