forked from fichtner/flows_to_weka
-
Notifications
You must be signed in to change notification settings - Fork 0
/
network_stream.py
62 lines (49 loc) · 1.65 KB
/
network_stream.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from scapy.all import *
from numpy import *
from entropy import kolmogorov, shannon
class NetworkStream(object):
def __init__(self,pkt):
self.src = pkt.src
self.dst = pkt.dst
self.sport = pkt.sport
self.dport = pkt.dport
self.time = pkt.time
self.proto = pkt.proto
self.payload = ""
self.inter_arrival_times = [0]
self.pkt_count = 1
self.len = pkt.len
if UDP in pkt:
if pkt[UDP].payload: self.payload = str(pkt[UDP].payload)
elif TCP in pkt:
if pkt[TCP].payload: self.payload = str(pkt[TCP].payload)
self.pkt = pkt
def avrg_len(self):
return self.len/self.pkt_count
def kolmogorov(self):
return round(kolmogorov(self.payload),4)
def shannon(self):
return round(shannon(self.payload),4)
def avrg_payload_len(self):
return len(self.payload)/self.pkt_count
def avrg_inter_arrival_time(self):
return round(mean(self.inter_arrival_times),4)
#override it on tcp_stream
def push_flag_ratio(self):
return 0.0
#override it on tcp stream
def unique_flags(self):
return 0.0
def add(self,pkt):
self.pkt_count += 1
self.len += pkt.len
self.inter_arrival_times.append(pkt.time - self.time)
if UDP in pkt:
if pkt[UDP].payload: self.payload += str(pkt[UDP].payload)
elif TCP in pkt:
if pkt[TCP].payload: self.payload += str(pkt[TCP].payload)
self.pkt = pkt
def application(self):
return "unknown"
def remove(self,pkt):
raise Exception('Not Implemented')