настройка регулярного выражения

This commit is contained in:
2025-08-26 02:44:44 +03:00
parent 3759e0465d
commit 18c5109e14
3 changed files with 10290588 additions and 18 deletions

View File

@@ -7,11 +7,14 @@ from datetime import datetime
LOG_DIR = "../logs"
DB_PATH = "../db/dns.sqlite"
# Регулярное выражение для парсинга строки
pattern = re.compile(
r'(\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2}).*UDP Rcv (\d+\.\d+\.\d+\.\d+).*Q [[^\]]*\] (\w+) ([\w\.-]+)\.'
)
# Создание базы данных и таблицы
# Функция для преобразования DNS-имени
def decode_dns_name(raw):
parts = re.findall(r'\((\d+)\)([a-zA-Z0-9\-]+)', raw)
return '.'.join([label for _, label in parts])
# Регулярка для строки запроса
query_pattern = re.compile(r'^(\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}:\d{2}).*UDP Rcv\s+(\d+\.\d+\.\d+\.\d+).*Q\s+[[^\]]*\]\s+(\w+)\s+((?:\(\d+\)[a-zA-Z0-9\-]+)+\(0\))')
# Подключение к БД
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("""
@@ -25,26 +28,31 @@ CREATE TABLE IF NOT EXISTS logs (
)
""")
# Обработка всех логов
# Обработка логов
for filename in os.listdir(LOG_DIR):
if filename.startswith("dns") and filename.endswith(".log"):
filepath = os.path.join(LOG_DIR, filename)
print(f"Обрабатываю: {filepath}")
print(f"🔍 Обрабатываю: {filepath}")
with open(filepath, encoding="utf-8", errors="ignore") as f:
for line in f:
match = pattern.search(line)
match = query_pattern.search(line)
if match:
try:
ts = datetime.strptime(match.group(1), "%d/%m/%Y %H:%M:%S").isoformat()
ts = datetime.strptime(match.group(1), "%d.%m.%Y %H:%M:%S").isoformat()
src_ip = match.group(2)
qtype = match.group(3)
domain = match.group(4)
raw_domain = match.group(4)
domain = decode_dns_name(raw_domain)