Ответ:

Готовая программа:

from collections import Counter

ip_counts = Counter()
unauthorized_lines = []

with open('access.log', 'r', encoding='utf-8') as log_file:
    for line in log_file:
        line = line.rstrip('
')
        if not line.strip():
            continue

        parts = line.split()
        ip = parts[0]
        status_code = parts[-2]

        ip_counts[ip] += 1
        if status_code == '401':
            unauthorized_lines.append(line)

with open('unauthorized.log', 'w', encoding='utf-8') as output_file:
    for line in unauthorized_lines:
        output_file.write(line + '
')

max_requests = max(ip_counts.values())
most_active_ips = [ip for ip, count in ip_counts.items()
                   if count == max_requests]

print('Количество запросов по IP:')
for ip, count in ip_counts.items():
    print(f'{ip}: {count}')

print(f'Максимальное количество запросов: {max_requests}')
print('IP-адреса с максимальным количеством запросов:',
      ', '.join(most_active_ips))

Для приведённого файла результаты будут такими:

  • 192.168.1.1 — 2 запроса;
  • 192.168.1.2 — 1 запрос;
  • 192.168.1.3 — 1 запрос.

В файл unauthorized.log будет записана строка с IP-адресом 192.168.1.2 и кодом ответа 401.

Ответ: наиболее активный IP-адрес — 192.168.1.1, количество запросов — 2.