Поиск в журнале в диапазоне дат

Похоже, что на этот вопрос фактически был дан ответ в этом другом вопросе , но он устарел, поэтому вот текущее решение:

Это включает в себя передачу вашего локального каталога после вашего «Pass 1» в wget, чтобы заставить его поверить, что это веб-сайт. Это легко сделать с помощью короткого кода Python, вызывающего SimpleHTTPRequestHandler , а затем вы-wgetс локального хоста с соответствующими параметрами.

Что-то в этом роде может работать :

import http.server
import socketserver
import os

PORT = 8000 # optional, can be changed

web_dir = os.path.join(os.path.dirname(path), 'web') # change path to your local files here if needed, like '/home' or 'C:\\tmp' on Windows
os.chdir(web_dir)

Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
httpd.serve_forever()

тогда ваш wgetможет быть вызван наhttp://localhost:8000

0
16.08.2020, 02:42
2 ответа

Это похоже на стандартный журнал HTTP-доступа, так почему бы не использовать grepдля сопоставления с шаблоном нужных вам дат?

$ grep '1[0-3]/Aug/2020' access_log

10.434.22.334 - unauthenticated 10/Aug/2020:23:45:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 10/Aug/2020:23:45:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 11/Aug/2020:23:34:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 12/Aug/2020:23:45:43 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 13/Aug/2020:23:43:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74

Шаблон grep '1[0 -3]/август/2020' использует выражение диапазона [0 -3]. Это выражение соответствует одному символу, который может принимать значения 0,1,2,3. Объедините это с остальной частью выражения, и вы получите 10 августа 2020 г., 11 августа 2020 г., 12 августа 2020 г. и 13 августа 2020 г. в качестве возможных шаблонов. grepраспечатает строки из журнала, соответствующие этим шаблонам.

0
18.03.2021, 23:12

Вы можете использовать специализированный инструмент структурированного текста, например Miller (https://github.com/johnkerl/miller), и запустить

mlr --nidx then filter 'strftime(strptime($4,"%d/%b/%Y:%H:%M:%S"),"%Y-%m-%d") >="2020-08-11" && strftime(strptime($4,"%d/%b/%Y:%H:%M:%S"),"%Y-%m-%d") <="2020-08-13"' input.txt

иметь

10.434.22.334 - unauthenticated 11/Aug/2020:23:34:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 12/Aug/2020:23:45:43 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 13/Aug/2020:23:43:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74

Я применил фильтр, чтобы получить все значения между 2020-08-11и2020-08-13

Некоторые примечания:

  • --nidxдля установки формата ввода и вывода(https://bit.ly/3h3UvN3)
  • filterприменить фильтр;
  • strftime(strptime($4,"%d/%b/%Y:%H:%M:%S"),"%Y-%m-%d") >="2020-08-11"— один из фильтров. С помощью strptimeя установил формат ввода даты(%d/%b/%Y:%H:%M:%S)четвертого поля ($4). Используя strftime, я изменяю формат даты в %Y-%m-%d
  • .
0
18.03.2021, 23:12

Теги

Похожие вопросы