+               } elsif (is_ipv6($ip) && not scalar map { my $network = NetAddr::IP->new($_); my $netip = NetAddr::IP->new($ip); unless ($network->contains($netip)) { (); } } @{$iplist{ipv6}}) {
+                       if (!defined $ip6s{$ip}) {
+                               %{$ip6s{$ip}} = ('tcp' => {}, 'udp' => {});
+                       }
+                       $ip6s{$ip}{$proto}{$dpt}=1;
+               }
+       #nov. 30 15:30:07 aurae.aoihime.eu kernel: audit: type=1100 audit(1575124207.371:38129): pid=685 uid=985 auid=4294967295 ses=4294967295 msg='op=PAM:authentication grantors=? acct="toto" exe="/usr/bin/pwauth" hostname=? addr=? terminal=? res=failed'
+       #XXX: Until mod_authnz pass to pwauth the (SERVER_NAME|SERVER_ADDR) + REMOTE_ADDR+REMOTE_PORT in env it's impossible to know who did a failed auth
+       #XXX: see https://github.com/phokz/mod-auth-external/blob/master/mod_authnz_external/TODO
+       #} elsif (/op=PAM:authentication grantors=\? acct="(.+)" exe="\/usr\/bin\/pwauth" hostname=.+ addr=(.+) terminal=\? res=failed/ && grep($_ ne $1, @userlist)) {
+       #       ...
+       }
+} capturex('journalctl', '-m', '-t', 'kernel', '-o', 'cat', '--no-hostname');
+
+#Process each ipv4s keys
+map {
+       #Set proto as either tcp or udp
+       for my $proto (('tcp', 'udp')) {
+               #Check if branch is empty
+               if (!scalar keys %{$ip4s{$_}{$proto}}) {
+                       #Prune it
+                       delete $ip4s{$_}{$proto};