Я пытаюсь выяснить, как кто-то взломал сайты моих клиентов. Я ищу файлы журнала, используя ^(?!.*404).*194\.226.*$
, чтобы попытаться найти строку в файле журнала, где кто-то, чей IP-адрес начинается с 194.226, обращался к серверу, который не привел к 404.Regex включает часть строки, но исключает другую часть strig
Типичная строка в файле журнала 194.226.xx.xx - - [18/Feb/2014:01:45:10 +0100] "GET /tikiwiki/tiki-graph_formula.php?w=1&h=1&s=1&min=1&max=2&f[]=x.tan.phpinfo()&t=png&title=http://www.google.com/humans.txt? HTTP/1.0" 404 84403 "-" "-" 163 84852
Я предполагаю, что 404 в конце строки 404 не найден, поскольку он следует за ответом HTTP/1.0.
Важно, чтобы 194.226 IS в строке, но 404 НЕ находится в линии. Из исследования здесь RegExp Look for part but exclude If, я придумал вышеприведенную линию. Он либо не работает, либо не найден. У меня нет способа узнать, какой из них, так как файл журнала имеет размер 2188 МБ.
Мой вопрос: Правильно ли регулярное выражение?
Какой инструмент/язык вы используете? '^ $' означает начало и конец строки *. Возможно, вы захотите использовать модификатор 'm' для« преобразования »его в начало и конец строки *. Но это действительно зависит от используемого вами инструмента/языка. – HamZa
Hi HamZa, я использую UltraEdit, который использует регулярные выражения, совместимые с Perl. Однако я загрузил еще один большой файл журнала с этого поста и нашел, что он действительно работает. Итак, для тех, кого это интересует, я нашел это с запросом, показывая, как хакер взломает пароль: '194.226.xx.xx - - [18/Feb/2014: 01: 34: 03 +0100]" GET/index .php? page = ../../../../../../../../../etc/passwd% 00 HTTP/1.0 "200 83670" - "" - "97 84112' –
Запуск этого URL-адреса на моем сайте не возвращает мне никакой плохой информации, так что это не так, но это могло быть :-) –