Получить 50 лучших IP-адресов из access.log, включая IPV6 - PullRequest
0 голосов
/ 16 апреля 2020

Я часто использую это для проверки журналов доступа к веб-сайту по IP-адресу. Проблема в том, что он включает в себя только IPV4, а не IPV6.

Есть идеи, какое регулярное выражение я могу использовать, чтобы включить (или запустить отдельную) команду для IPV6?

cat access.log | sed -e 's/^\([[:digit:]\.]*\).*"\(.*\)"$/\1 \2/' | sort -n | uniq -c | sort -nr | head -50

1 Ответ

1 голос
/ 16 апреля 2020

Сопоставление IP-адресов с помощью регулярных выражений может оказаться непростым делом - ваши сопоставляют множество вещей, которые не являются действительными адресами IPv4, например 100000.55.

Есть модуль perl, Regexp :: Common , который предоставляет проверенные регулярные выражения для сопоставления всевозможных вещей, включая адреса IPv4 и IPv6. Если вы установите его (пакет Ubuntu libregexp-common-perl), вы можете заменить sed часть этого конвейера на

perl -MRegexp::Common=net -lne '/^($RE{net}{IPv4}|$RE{net}{IPv6}).*"(.*)"$/ && print "$1 $2"'

, чтобы сопоставить оба семейства адресов.

...