# -*- coding: utf-8 -*- # # Copyright Grégory Soutadé 2023 # This file is part of iwla # iwla is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # iwla is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with iwla. If not, see . # import re from iwla import IWLA from iplugin import IPlugin """ Post analysis hook Detect if IP is IPv4 or IPv6 Plugin requirements : None Conf values needed : None Output files : None Statistics creation : visits : remote_ip => ip_type month_stats : ip_type : {4: XXX, 6: XXX} Statistics update : None Statistics deletion : None """ class IWLAPostAnalysisIPType(IPlugin): def load(self): self.v4_re = re.compile('([0-9]{1,3}\.){3}[0-9]{1,3}$') return True def hook(self): stats = self.iwla.getValidVisitors() month_stats = self.iwla.getMonthStats() if month_stats.get('ip_type', None) is None: month_stats['ip_type'] = {4:0, 6:0} for (k, super_hit) in stats.items(): if super_hit.get('ip_type', None) is None: if self.v4_re.match(super_hit['remote_ip']): _type = 4 else: _type = 6 super_hit['ip_type'] = _type month_stats['ip_type'][_type] += 1