-
Notifications
You must be signed in to change notification settings - Fork 2
/
compress.py
145 lines (128 loc) · 4.8 KB
/
compress.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# import pyshark
# cap = pyshark.LiveCapture(interface = 'lo')
# for pkt in enumerate(cap):
# if 'ip' in pkt:
# print (pkt,flush = True)
# cap.close()
from scapy.all import *
import zlib
# zlib.crc32(s)
dict = {}
class ip:
# Class Variable
#static_var = 'any'
# The init method or constructor
def __init__(self, version, ihl, tos, len, id, flags, frag, ttl, proto, chksum, src, dst, options):
# Instance Variable
self.version = version
self.ihl = ihl
self.tos = tos
self.len = len
self.id = id
self.flags = flags
self.frag = frag
self.ttl = ttl
self.proto = proto
self.chksum = chksum
self.src = src
self.dst = dst
self.options = options
class tcp:
# Class Variable
#static_var = 'any'
# The init method or constructor
def __init__(self, sport, dport, seq, ack, dataofs, reserved, flags, window, chksum, urgptr, options):
# Instance Variable
self.sport = sport
self.dport = dport
self.seq = seq
self.ack = ack
self.dataofs = dataofs
self.reserved = reserved
self.flags = flags
self.window = window
self.chksum = chksum
self.urgptr = urgptr
self.options = options
# hashed values
# version
# proto
# src
# dst
# sport
# dport
class tcpipmod:
def __init__(self, compressed, hid, ihl, tos, len, id, ipflags, frag, ttl, ipchksum, ipoptions, seq, ack, dataofs, reserved, tcpflags, window, tcpchksum, urgptr, tcpoptions):
# Instance Variable
self.compressed = compressed
self.hid = hid
self.ihl = ihl
self.tos = tos
self.len = len
self.id = id
self.ipflags = ipflags
self.frag = frag
self.ttl = ttl
self.ipchksum = ipchksum
self.ipoptions = ipoptions
self.seq = seq
self.ack = ack
self.dataofs = dataofs
self.reserved = reserved
self.tcpflags = tcpflags
self.window = window
self.tcpchksum = tcpchksum
self.urgptr = urgptr
self.tcpoptions = tcpoptions
# hashed values
# version
# proto
# src
# dst
# sport
# dport
class tcpip:
def __init__(self, compressed, version, ihl, tos, len, id, ipflags, frag, ttl, proto, ipchksum, src, dst, ipoptions, sport, dport, seq, ack, dataofs, reserved, tcpflags, window, tcpchksum, urgptr, tcpoptions):
# Instance Variable
self.compressed = compressed
self.version = version
self.ihl = ihl
self.tos = tos
self.len = len
self.id = id
self.ipflags = ipflags
self.frag = frag
self.ttl = ttl
self.proto = proto
self.ipchksum = ipchksum
self.src = src
self.dst = dst
self.ipoptions = ipoptions
self.sport = sport
self.dport = dport
self.seq = seq
self.ack = ack
self.dataofs = dataofs
self.reserved = reserved
self.tcpflags = tcpflags
self.window = window
self.tcpchksum = tcpchksum
self.urgptr = urgptr
self.tcpoptions = tcpoptions
def pkt_callback(pkt):
# pkt.show()
# print(pkt[IP].version)
ip1 = ip(pkt[IP].version, pkt[IP].ihl, pkt[IP].tos, pkt[IP].len, pkt[IP].id, pkt[IP].flags, pkt[IP].frag, pkt[IP].ttl, pkt[IP].proto, pkt[IP].chksum, pkt[IP].src, pkt[IP].dst, pkt[IP].options)
tcp1 = tcp(pkt[TCP].sport, pkt[TCP].dport, pkt[TCP].seq, pkt[TCP].ack, pkt[TCP].dataofs, pkt[TCP].reserved, pkt[TCP].flags, pkt[TCP].window, pkt[TCP].chksum, pkt[TCP].urgptr, pkt[TCP].options)
# print(pkt1)
s = pkt[IP].src + " " + pkt[IP].dst + " " + str(pkt[TCP].sport) + " " + str(pkt[TCP].dport)
hid = hash(s) & 0xffffffff
if(hid in dict):
comp = tcpipmod(True, hid, pkt[IP].ihl, pkt[IP].tos, pkt[IP].len, pkt[IP].id, pkt[IP].flags, pkt[IP].frag, pkt[IP].ttl, pkt[IP].chksum, pkt[IP].options, pkt[TCP].seq, pkt[TCP].ack, pkt[TCP].dataofs, pkt[TCP].reserved, pkt[TCP].flags, pkt[TCP].window, pkt[TCP].chksum, pkt[TCP].urgptr, pkt[TCP].options)
else:
dict[hid] = s
comp = tcpip(False, pkt[IP].version, pkt[IP].ihl, pkt[IP].tos, pkt[IP].len, pkt[IP].id, pkt[IP].flags, pkt[IP].frag, pkt[IP].ttl, pkt[IP].proto, pkt[IP].chksum, pkt[IP].src, pkt[IP].dst, pkt[IP].options, pkt[TCP].sport, pkt[TCP].dport, pkt[TCP].seq, pkt[TCP].ack, pkt[TCP].dataofs, pkt[TCP].reserved, pkt[TCP].flags, pkt[TCP].window, pkt[TCP].chksum, pkt[TCP].urgptr, pkt[TCP].options)
# print("hash: ",hash(s) & 0xffffffff)
print(comp.compressed)
print('---------------------------------------------------------') # debug statement
sniff(iface="#####", prn=pkt_callback, filter="tcp and host ###########", store=0)