(Tutorial) How to create Apache log parser with Python

Поделиться
HTML-код
  • Опубликовано: 21 дек 2024

Комментарии •

  • @Jui4an
    @Jui4an 4 года назад +1

    спасибо! Мне так понравился ваш голос от него такое спокойствие уверенность у меня ощущается. Пойду еще видосики смотреть что у вас есть.

  • @NoveL58
    @NoveL58 7 лет назад +1

    Отличные видео-уроки. Учил пайтон, чтобы автоматизировать ряд процессов на работе. Далее цели никакой не было. Теперь, благодаря урокам, нахожу неплохое применение языку. Прекрасный багаж знаний Олег. Спасибо большое!

    • @zaemiel
      @zaemiel  7 лет назад

      Спасибо

  • @ekaterinavolkova4348
    @ekaterinavolkova4348 2 года назад

    Супер, спасибо. Как раз то, что нужно! Кстати, меня всегда учили за собой файлы и подключения к базе закрывать))

  • @monkeysys
    @monkeysys 4 года назад +1

    Великолепно!!!

  • @malenkiy.huligan
    @malenkiy.huligan 7 лет назад +1

    Просто супер, автору огромное спасибо, и успехов во всем, а нам по больше уроков.

  • @MrGraf131313
    @MrGraf131313 5 лет назад

    Спасибо, очень познавательно!)

  • @АлександрКовалев-ь1ы

    Хороший урок, спасибо. Будут ли ещё уроки?

    • @zaemiel
      @zaemiel  8 лет назад

      Да, планировал во всяком случае.

    • @АлександрКовалев-ь1ы
      @АлександрКовалев-ь1ы 8 лет назад +1

      Олег Молчанов Можете сделать серию уроков для чего вы используете Python в работе? чем больше сложных задач будет рассмотрено, тем лучше

  • @vladplat3028
    @vladplat3028 Год назад +1

    Линк в описание на пример лога не до конца записан. Можно ли его обнвовить?

  • @sosinboxru
    @sosinboxru 3 года назад +1

    Как то слишком сложное исполнение непонятного решения. То что вы написали это полторы строчки на шеле, но даже если взять как решение задачи исключительно на питоне, то и решение не верное.
    Вы ищите ip адреса не только в поле from лога, но и to,request. Как решение задачи подсчёта ip адресов в тексте - решение верное, но как решение по обнаружению атаки - нет.
    Если интересно подробнее напишите мне, расскажу подробнее.

  • @remvord
    @remvord 7 лет назад +1

    можно ли строчку
    write_csv(count(reader('test.log')))
    разбить на отдельные строки? как бы это выглядело? не могу никак добиться...
    reader('test.log')
    count('reader')

    • @zaemiel
      @zaemiel  7 лет назад +5

      эту строку вы не разобьете на функции, но ее можно разбить на вызовы функций.
      log = reader('test.log')
      ips_quantity = count(log)
      write_csv(ips_quantity)

  • @Dorofma
    @Dorofma 4 года назад

    Здравствуйте! На 5:26 видео показано как происходит чтение файла. Я сделал все тоже самое, но кроме фразы: [Finished in 0.3s] больше ничего не вывелось. Почему так?

    • @oybeknarzikulov2255
      @oybeknarzikulov2255 4 года назад

      что то не так в выводом, скорее всего опечатка где то, перепроверь))

    • @Dorofma
      @Dorofma 4 года назад

      Oybek Narzikulov ну я бы не стал тогда бы писать, если бы десять раз не перепроверил

  • @carnivorous8418
    @carnivorous8418 4 года назад

    Подскажите, создает файлик, но пустой. В чем ошибка?

  • @esthetik_life
    @esthetik_life 6 лет назад

    еще хотелось бы ваших уроков по Django )

    • @zaemiel
      @zaemiel  6 лет назад

      Они обязательно будут. Но не могу сказать, когда именно

    • @esthetik_life
      @esthetik_life 6 лет назад

      будем ждать )

  • @victorermeychuk1979
    @victorermeychuk1979 8 лет назад

    У меня ошибку пишет (скопировал вроде все как у вас, файл подсунул с двумя IP , csv выходной файл создает , но он пустой).

  • @remvord
    @remvord 8 лет назад

    как определить по кол-ву запросов что это ddos атака - например если это банк-клиент (сервер) то там запросы могут превышать и 800 и 1000 обращений (вполне как оказалось легально соединяются)...

    • @zaemiel
      @zaemiel  8 лет назад

      Зависит от конкретной ситуации.
      В данной ситуации это был блог на wordpress.
      Определить можно по количеству запросов в единицу времени от одного IP.

    • @remvord
      @remvord 7 лет назад

      можем ли вывести в web - более читабельно?

    • @zaemiel
      @zaemiel  7 лет назад

      Да, можно. Когда запилю касты по Flask или Django, то можно будет реализовать такой проект.

  • @kotshirokow1731
    @kotshirokow1731 6 лет назад

    Здравствуйте, очень понравился урок. Единственное не могу понять, почему выводится в одну ячейку информация, через запятую и через строку, может подскажете если не затруднит? Возможно это просто отображение exсel 16? Заранее спасибо.
    А вообще уроки супер, всё по факту. Очень понравилось, успехов в дальнейшем))

    • @zaemiel
      @zaemiel  6 лет назад +1

      Спасибо.
      Тут я сделал FAQ и там есть ответ на ваш вопрос (если не поможет, то вам нужно будет гуглить проблему):
      p-notes.ru/

    • @transporagous
      @transporagous 5 лет назад

      @@zaemiel ссылка не работает(

  • @Нячанг
    @Нячанг 7 лет назад +1

    Не могу никак понятьо почему у меня записывает в эксель файл не в отдельных ячейках а все льет в кучу?

    • @АлександрВласов-к9д
      @АлександрВласов-к9д 7 лет назад +1

      Тоже пишет все в одну ячейку.

    • @Horneringer
      @Horneringer 7 лет назад

      Та же фигня(( Кидает в одну колонку всё

    • @esthetik_life
      @esthetik_life 6 лет назад

      копать нужно в настройках экселя, там есть параметр по которому он разделяет csv файл, например по ; или по ,

  • @victorermeychuk1979
    @victorermeychuk1979 8 лет назад

    Traceback (most recent call last):
    File "E:\Soft\Python\parser.py", line 40, in
    write_csv(count(reader()))
    TypeError: reader() missing 1 required positional argument: 'filename'
    [Finished in 0.1s with exit code 1]
    [shell_cmd: python -u "E:\Soft\Python\parser.py"]
    [dir: E:\Soft\Python]
    [path: C:\Program Files\Python35\Scripts\;C:\Program Files\Python35\;C:\oraclexe\app\oracle\product\11.2.0\server\bin;;C:\ProgramData\Oracle\Java\javapath;D:\RC\Hadoop\SQL\DWH-SQL\JDBC;C:\Program Files\ImageMagick-7.0.1-Q16;C:\Windows\System32\Wbem;C:\Program Files\RSA SecurID Token Common;C:\Program Files (x86)\Skype\Phone\;C:\Windows\;C:\Program Files (x86)\Universal Extractor;C:\Program Files (x86)\Universal Extractor\bin;C:\mongodb\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\EaseUS\Todo Backup\bin\x64\]

    • @zaemiel
      @zaemiel  8 лет назад

      Он же вам пишет:
      TypeError: reader() missing 1 required positional argument: 'filename'
      Вы не передали в функцию один позиционный аргумент - filename

  • @amineboujnah6712
    @amineboujnah6712 7 лет назад

    can you please show me the code of the server to get logs like those you got ?

    • @zaemiel
      @zaemiel  7 лет назад +1

      Hi, you can find it in the attached file to the video. The link to Dropbox.
      If you mean how to get a server log file, so you can do it in an admin panel of your website or just ask a support team of your hosting provider.
      I have no code to get the log, because it was generated by apache server automagically.

    • @amineboujnah6712
      @amineboujnah6712 7 лет назад

      Well look, i've made a connection between a server and a client by programming scripts in Python, so i need to save what the client is trying to write in a log file. (i'm trying to create a HONEYPOT to detect what a client is doing or what he's looking for)
      !!!!!!!!!!!!!!!Server.py
      #!/usr/bin/python
      import socket
      def Main () :
      server_name = ''
      server_port = 555
      server_banner = """Sagem F@st 2604 ADSL router linux 7 3.49a4G_Topnet
      | banner: \xFF\xFD\x01\xFF\xFD!\xFF\xFB\x01\xFF\xFB\x03FAST2604 ADSL Rout
      |_er (Software Version:3.49a4G_Topnet)\x0D\x0ALogin:
      Service Info: Device: broadband router """
      fakepage = """
      401 Unauthorized
      401 Unauthorized
      Authorization required.
      micro_httpd
      """
      server_socket = socket.socket()
      server_socket.bind((server_name, server_port))
      server_socket.listen(10)

      print "server ON"
      while True :
      c,addr = server_socket.accept()
      print "We have connection from client ip" ,addr
      data = c.recv(1024)
      # data = "GET /admin/wp-admin.php http/1.1"
      # Parse data and get URI= /admin/wp-admin.php
      print "Bad guy is looking for: " ,data
      # change data with parsed data
      print "sending fake page : " ,fakepage
      c.send (fakepage)
      c.close()
      if __name__== '__main__' :
      Main()
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
      !!!!!!!!!!!!!!!!client.py
      #!/usr/bin/python
      import socket
      def Main ():
      client_socket = socket.socket()
      server_name = '192.168.137.170'
      server_port = 555
      client_socket.connect ((server_name,server_port))

      data = client_socket.recv(1024)
      print 'Server is : ' ,data
      client_socket.send("GET /admin/wp-admin.php http/1.1")
      pagedata = client_socket.recv(1024)
      print 'Web page : ' ,pagedata
      client_socket.close()
      if __name__== '__main__' :
      Main ()
      ---------------------------------------------
      Please Can you Help me.

    • @zaemiel
      @zaemiel  7 лет назад

      "i need to save what the client is trying to write in a log file"
      Your client just gets some data from the server. The client doesn't try to write the received data to a file.
      And if I'd want to save content of the pagedata variable, so I'd try:
      with open('some_filename', 'w') as file:
      file.write(pagedata)

    • @amineboujnah6712
      @amineboujnah6712 7 лет назад

      Really i'd like to have a way to get logs like those in my server and i can't find any way to this.

    • @zaemiel
      @zaemiel  7 лет назад

      ok, if you want to get a log file, so use an 'a' flag of .open() function.
      with open('some_filename', 'a') as file:
      file.write(pagedata)
      and the some_filename file will be appended with a content of the pagedata variable on each iteration of the while loop.

  • @alexanderpadalka5708
    @alexanderpadalka5708 3 года назад

  • @followthewhiterabbit4039
    @followthewhiterabbit4039 7 лет назад +4

    интересный урок, но делать такие вещи через python - изврат, все это делается одно-строчной командой на awk:
    [code] awk '{print($1)}' apache.log|sort|uniq -c [/code] все, профит! Но уже совсем другое дело, когда нужно спарсить сайт... или что ли бо еще не касающееся логов...

  • @remvord
    @remvord 7 лет назад

    конструкцию __name__ == '__main__': - я так понимаю можно вообще не писать?

    • @zaemiel
      @zaemiel  7 лет назад +1

      Лучше писать. Так удобнее.
      Но если удобство неочевидно, то не пишите. До поры до времени.