Несколько месяцев назад я написал небольшой скрипт на Python, который собирает базовую статистику из логов моих приманок. Я обнаружил, что в этом скрипте есть ошибка, и я не смог найти ответ самостоятельно.
Скрипт будет читать лог-файлы атак. Файлы журнала содержат пять частей данных в каждой строке.
- отметка даты/времени
- IP-адрес, с которого произошла атака
- попытка имени пользователя
- попытка ввода пароля
- код успеха/неудачи
Пример:
2014-12-24 13:37:00,1.2.3.4,root,password,0
Пять фрагментов данных разделены символом ','.
Поэтому я использовал ',' в качестве разделителя, чтобы разделить строки на список, как здесь.
['2014-12-24 13:37:00', '1.2.3.4', 'root', 'password', '0']
из которого я могу получить данные, которые мне нужны.
Проблема, с которой, я уверен, некоторые из вас уже разобрались,
возникает, когда в попытке ввести пароль присутствует разделитель,
в данном случае H4ck3r,,h4cker,,,2015
Файл журнала выглядит следующим образом
2015-01-02 01:44:38,2.3.4.5,root,H4ck3r,,h4cker,,2015,0
и превращает полученный список в этот после того, как он был slpit.
['2015-01-02 01:44:38', '2.3.4.5', 'root', 'H4ck3r', '', 'h4cker', '', '2015', '0']
Моей первой мыслью об обходном пути здесь было удалить [0:3] и [-1],
затем принять то, что осталось, в качестве пароля, но,
не очень чисто и точно, чтобы сказать минимум.
Если злоумышленник использует разделитель в имени пользователя, я вернусь к исходной точке.
Вопросы.
- Есть ли простой и понятный способ решить эту проблему с помощью разделения?
- Будет ли регулярное выражение лучшим способом пойти сюда?
- ...Другие способы решить эту проблему?
csv.Writer
, а затем прочитать его, используяcsv.Reader
- комбинация Writer/Reader должна обрабатывать поля кавычек/некавычек для вас. - person mgilson   schedule 07.01.2015