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 ""