-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUltility.py
59 lines (51 loc) · 1.86 KB
/
Ultility.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
import tldextract
import dateutil.parser as parseDate
from dateutil.relativedelta import relativedelta
import regex as re
import datetime
class Ultility:
@staticmethod
def extract_FQDN(FQDN):
return tldextract.extract(str(FQDN))
@staticmethod
def is_after_end_date(beginTimestamp,endTimestamp):
beginTime = parseDate.isoparse(beginTimestamp)
endTime = parseDate.isoparse(endTimestamp)
if (beginTime < endTime):
return False
else:
return True
@staticmethod
def get_current_time():
return datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat()
@staticmethod
def plus_time(minutesAdd,stringTimestamp):
date = parseDate.isoparse(stringTimestamp)
newDate = date + relativedelta(minutes=minutesAdd)
return newDate.isoformat()
@staticmethod
def get_domain(FQDN):
FQDNExtract = tldextract.extract(str(FQDN))
return FQDNExtract.domain+"."+FQDNExtract.suffix
@staticmethod
def is_tunelling_get_tool_regex_analysis(queryRecord):
subdomain = Ultility.extract_FQDN(queryRecord.FQDN).subdomain
#List of know regex by tools
regexs={"DNSCAT_BP":r"[A-Za-z0-9]{25,63}\.[A-Za-z0-9]{25,63}\.[A-Za-z0-9]{25,63}"}
for attackTool in regexs.keys():
if re.match(regexs[attackTool],subdomain):
return True, attackTool
return False, None
@staticmethod
def get_class_serverity(avarageRequestPerDomain,numberOfRequests):
times = numberOfRequests / avarageRequestPerDomain
if times >= 4.0:
return "Severe"
if times >= 3.0:
return "High"
if times >= 2.0:
return "Elevated"
if times >= 1.5:
return "Guarded"
else:
return "Low"