Skip to content

Commit 509103d

Browse files
committed
fix: use strict domain matching & add reg patterns
1 parent 06a4eda commit 509103d

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

src/main.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import argparse
44
import asyncio
55
import random
6+
import re
67
import logging
78
import os
89
import sys
@@ -65,6 +66,7 @@ def __init__(self, host, port, blacklist, log_access, log_err, no_blacklist, aut
6566
self.tasks_lock = asyncio.Lock()
6667

6768
self.blocked = []
69+
self.blocked_regex = []
6870
self.whitelist = []
6971
self.tasks = []
7072
self.server = None
@@ -137,7 +139,23 @@ def load_blacklist(self):
137139
sys.exit(1)
138140

139141
with open(self.blacklist, "r", encoding="utf-8") as f:
140-
self.blocked = [line.rstrip().encode() for line in f]
142+
for line in f:
143+
line = line.strip()
144+
if not line or line.startswith('#'):
145+
continue
146+
147+
if line.startswith('regex:'):
148+
pattern = line[6:].strip()
149+
try:
150+
self.blocked_regex.append(re.compile(pattern.encode()))
151+
except re.error as e:
152+
self.print(
153+
f"\033[91m[ERROR]: Invalid regex pattern {pattern}: {e}\033[0m")
154+
self.logger.error(
155+
"Invalid regex pattern %s: %s", pattern, e)
156+
else:
157+
escaped_domain = re.escape(line).encode()
158+
self.blocked.append(escaped_domain)
141159

142160
async def run(self):
143161
"""
@@ -435,10 +453,11 @@ async def fragment_data(self, reader, writer):
435453
return
436454

437455
if not self.no_blacklist and all(site not in data for site in self.blocked):
438-
self.allowed_connections += 1
439-
writer.write(head + data)
440-
await writer.drain()
441-
return
456+
if not any(regex.search(data) for regex in self.blocked_regex):
457+
self.allowed_connections += 1
458+
writer.write(head + data)
459+
await writer.drain()
460+
return
442461

443462
self.blocked_connections += 1
444463

0 commit comments

Comments
 (0)