настройка регулярного выражения
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user