-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate-lists.sh
102 lines (83 loc) · 5.07 KB
/
generate-lists.sh
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
#!/bin/bash
export LC_ALL=C
[ -d ./temp ] && rm -rf ./temp
[ -d ./output ] && rm -rf ./output
function parseFile() {
cat $1 | sed 's/[[:space:]]*#.*//; s/^[[:space:]]*//; s/[[:space:]]*$//; s/.*[[:blank:]]//; /^[[:space:]]*$/d' | sort | uniq
}
[ ! -d ./output ] && mkdir -p ./output
for folder in ./lists/*/; do
folder=${folder%*/}
listname=${folder##*/}
[ ! -d ./temp/${listname} ] && mkdir -p ./temp/${listname}
wget -i ./lists/${listname}/source.list -O ./temp/${listname}/dirty.source.list
parseFile ./temp/${listname}/dirty.source.list > ./temp/${listname}/clean.source.list
cat ./lists/global.black.list ./lists/${listname}/black.list > ./temp/${listname}/dirty.black.list
parseFile ./temp/${listname}/dirty.black.list > ./temp/${listname}/clean.black.list
cat ./lists/global.white.list ./lists/${listname}/white.list > ./temp/${listname}/dirty.white.list
parseFile ./temp/${listname}/dirty.white.list > ./temp/${listname}/clean.white.list
sort -u ./temp/${listname}/clean.source.list ./temp/${listname}/clean.black.list | grep -Fxv -f ./temp/${listname}/clean.white.list > ./temp/${listname}/${listname}.list
[ ! -d ./output/${listname} ] && mkdir -p ./output/${listname}
listurl="https://raw.githubusercontent.com/groveld/sinkhole/lists/${listname}"
entries=$(wc -l < ./temp/${listname}/${listname}.list | tr -d '[:space:]')
updated=$(date -d "$(stat -c '%y' ./temp/${listname}/${listname}.list)" -u +"%F %T UTC")
website="https://www.groveld.com/sinkhole"
issues="https://github.com/groveld/sinkhole/issues"
# GENERATE DOMAINS LIST
filename="domains.txt"
printf "# File: ${listurl}/${filename}\n" > ./output/${listname}/${filename}
printf "# Entries: ${entries}\n" >> ./output/${listname}/${filename}
printf "# Updated: ${updated}\n" >> ./output/${listname}/${filename}
printf "# Website: ${website}\n" >> ./output/${listname}/${filename}
printf "# Issues: ${issues}\n\n" >> ./output/${listname}/${filename}
cat ./temp/${listname}/${listname}.list >> ./output/${listname}/${filename}
# GENERATE ADBLOCKER-SYNTAX DOMAINS LIST
filename="adblocker.txt"
printf "! File: ${listurl}/${filename}\n" > ./output/${listname}/${filename}
printf "! Entries: ${entries}\n" >> ./output/${listname}/${filename}
printf "! Updated: ${updated}\n" >> ./output/${listname}/${filename}
printf "! Website: ${website}\n" >> ./output/${listname}/${filename}
printf "! Issues: ${issues}\n\n" >> ./output/${listname}/${filename}
sed 's/^/||/; s/$/\^/' ./temp/${listname}/${listname}.list >> ./output/${listname}/${filename}
# GENERATE HOSTS LIST
filename="hosts.txt"
printf "# File: ${listurl}/${filename}\n" > ./output/${listname}/${filename}
printf "# Entries: ${entries}\n" >> ./output/${listname}/${filename}
printf "# Updated: ${updated}\n" >> ./output/${listname}/${filename}
printf "# Website: ${website}\n" >> ./output/${listname}/${filename}
printf "# Issues: ${issues}\n\n" >> ./output/${listname}/${filename}
sed 's/^/0.0.0.0 /' ./temp/${listname}/${listname}.list >> ./output/${listname}/${filename}
# GENERATE DNSMASQ LIST
filename="dnsmasq.txt"
printf "# File: ${listurl}/${filename}\n" > ./output/${listname}/${filename}
printf "# Entries: ${entries}\n" >> ./output/${listname}/${filename}
printf "# Updated: ${updated}\n" >> ./output/${listname}/${filename}
printf "# Website: ${website}\n" >> ./output/${listname}/${filename}
printf "# Issues: ${issues}\n\n" >> ./output/${listname}/${filename}
sed 's/^/address=\//; s/$/\/0.0.0.0/' ./temp/${listname}/${listname}.list >> ./output/${listname}/${filename}
# GENERATE PAC (PROXY AUTO-CONFIGURATION) LIST
filename="pac.txt"
printf "// File: ${listurl}/${filename}\n" > ./output/${listname}/${filename}
printf "// Entries: ${entries}\n" >> ./output/${listname}/${filename}
printf "// Updated: ${updated}\n" >> ./output/${listname}/${filename}
printf "// Website: ${website}\n" >> ./output/${listname}/${filename}
printf "// Issues: ${issues}\n\n" >> ./output/${listname}/${filename}
printf "var BLOCKLIST = {\n" >> ./output/${listname}/${filename}
sed 's/^/\"/; s/$/\":null,/' ./temp/${listname}/${listname}.list >> ./output/${listname}/${filename}
printf "};\n\n" >> ./output/${listname}/${filename}
printf "function FindProxyForURL(url, host) {\n" >> ./output/${listname}/${filename}
printf " var h = host.toLowerCase();\n" >> ./output/${listname}/${filename}
printf " while(1) {\n" >> ./output/${listname}/${filename}
printf " var n = h.indexOf(\".\");\n" >> ./output/${listname}/${filename}
printf " if (n == -1) break;\n" >> ./output/${listname}/${filename}
printf " var h = h.substr(n+1);\n" >> ./output/${listname}/${filename}
printf " if (h in BLOCKLIST) return \"PROXY 127.0.0.1:8021\";\n" >> ./output/${listname}/${filename}
printf " }\n" >> ./output/${listname}/${filename}
printf " return \"DIRECT\";\n" >> ./output/${listname}/${filename}
printf "}\n" >> ./output/${listname}/${filename}
[ -d ./temp/${listname} ] && rm -rf ./temp/${listname}
done
# CLEANING TEMPORARY FILES AND EXIT
[ -d ./temp ] && rm -rf ./temp
echo "Finished generating lists."
exit 0