-
Notifications
You must be signed in to change notification settings - Fork 0
/
block-exes.py
106 lines (84 loc) · 3.09 KB
/
block-exes.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
# import os
import subprocess
import argparse
import pathlib
def Rule(appname, dispName, domain, bound, description, name):
command = f"New-NetFirewallRule -Program {appname} -Action Block -Profile Domain, {domain} -DisplayName {dispName} -Description {description} -Direction {bound}"
# command = command.split()
e = subprocess.run(["powershell", "-Command",command], capture_output=True)
if str(e.returncode) == "1":
eLog = appname + f" is not blocked | {bound} | {domain}"
print(eLog)
print(e.stderr)
with open(f"{name}.txt", "w+") as log:
log.write(eLog)
elif str(e.returncode) == str(0):
print(f"{appname} is blocked | {bound} | {domain}")
else:
print("Unidentified Error!")
def work(folder, name):
# with open(f"{name}.txt", "w+") as log:
# log.write("These paths are not blocked:")
description = dispName = ""
# if not os.path.isdir(folder):
# return -1
# else:
# for root, dirs, files in os.walk(folder, topdown = False):
# for file in files:
# if file[-3:].lower() == "exe":
# appname = os.path.join(root, file)
# appname = f"\"{appname}\""
# print(appname)
# description = dispName = f"\"{name} - {file}\""
# domain = "Private"
# bound = "Inbound"
# Rule(appname, dispName, domain, bound, description, name)
# bound = "Outbound"
# Rule(appname, dispName, domain, bound, description, name)
# domain = "Public"
# bound = "Inbound"
# Rule(appname, dispName, domain, bound, description, name)
# bound = "Outbound"
# Rule(appname, dispName, domain, bound, description, name)
# print()
folderpath = pathlib.Path(folder)
if not folderpath.is_dir():
return -1
else:
for file in folderpath.rglob("*.[eE][xX][eE]"):
appname = f"\"{file}\""
print(appname)
description = dispName = f"\"{name} - {file}\""
domain = "Private"
bound = "Inbound"
Rule(appname, dispName, domain, bound, description, name)
bound = "Outbound"
Rule(appname, dispName, domain, bound, description, name)
domain = "Public"
bound = "Inbound"
Rule(appname, dispName, domain, bound, description, name)
bound = "Outbound"
Rule(appname, dispName, domain, bound, description, name)
print()
return 0
def check(data):
if type(data) is int:
raise argparse.ArgumentTypeError("Invalid Argument, add a string path")
else:
return data
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Block folder of EXEs from accessing Internet.")
parser.add_argument("-p", "--path", help = "Add path to the folder where EXEs are located",
type = check, required = True)
parser.add_argument("-n", "--name", help = "Add name to display in Firewall.",
type = check, required = True)
args = parser.parse_args()
folder = args.path
name = args.name
res = work(folder, name)
if res == 0:
print("All EXEs are blocked.")
elif res == -1:
print("Supplied folder path is not a valid folder.")
# python main.py -p C:\Program Files\Adobe\Illustrator -n "Adobe Illustrator"