]> git.somenet.org - pub/jan/netsec2.git/blob - exercise2/task2/readflows.py
find flow
[pub/jan/netsec2.git] / exercise2 / task2 / readflows.py
1 #!/usr/bin/env python
2
3 # disable IPv6 error message
4 import logging
5 logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
6 from scapy.all import *
7 logging.getLogger("scapy.runtime").setLevel(logging.WARN)
8 from pprint import pprint
9
10 # disable payload parsing (saves two seconds runtime^^)
11 IP.payload_guess = []
12
13 flowset = {}
14
15 for p in PcapReader('ex22.pcap'):
16     if IP in p:
17         src = p[IP].src
18         dst = p[IP].dst
19         lenip = p[IP].len
20         if lenip != 36:
21             continue
22 #        print ("Src: %s (ether), Dest: %s (ip)" % (src, dst))
23
24         if (src,dst) in flowset:
25             i,o = flowset[(src,dst)]
26             flowset[(src,dst)] = (i+1,o)
27         elif (dst,src) in flowset:
28             i,o = flowset[(dst,src)]
29             flowset[(dst,src)] = (i,o+1)
30         else:
31             flowset[(src,dst)] = (1, 0)
32
33 largeflows = {}
34
35 for flow,counts in flowset.items():
36     if counts[0]+counts[1] > 200:
37         largeflows[flow] = counts
38
39 pprint(largeflows)