1#!/usr/local/bin/perl 2#----------------------------------------------------------------------------- 3# IPv6 AWStats plugin 4# This plugin allow AWStats to make reverse DNS Lookup on IPv6 addresses. 5#----------------------------------------------------------------------------- 6# Perl Required Modules: Net::IP and Net::DNS 7#----------------------------------------------------------------------------- 8 9 10# <----- 11# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES 12if (!eval ('require "Net/IP.pm";')) { return $@?"Error: $@":"Error: Need Perl module Net::IP"; } 13if (!eval ('require "Net/DNS.pm";')) { return $@?"Error: $@":"Error: Need Perl module Net::DNS"; } 14# -----> 15use strict;no strict "refs"; 16 17 18 19#----------------------------------------------------------------------------- 20# PLUGIN VARIABLES 21#----------------------------------------------------------------------------- 22# <----- 23# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN 24# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. 25my $PluginNeedAWStatsVersion="5.5"; 26my $PluginHooksFunctions="GetResolvedIP"; 27# -----> 28 29# <----- 30# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. 31use vars qw/ 32$resolver 33/; 34# -----> 35 36 37#----------------------------------------------------------------------------- 38# PLUGIN FUNCTION: Init_pluginname 39#----------------------------------------------------------------------------- 40sub Init_ipv6 { 41 my $InitParams=shift; 42 my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); 43 44 # <----- 45 # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS 46 debug(" Plugin ipv6: InitParams=$InitParams",1); 47 $resolver = Net::DNS::Resolver->new; 48 # -----> 49 50 return ($checkversion?$checkversion:"$PluginHooksFunctions"); 51} 52 53 54#----------------------------------------------------------------------------- 55# PLUGIN FUNCTION: GetResolvedIP_pluginname 56# UNIQUE: YES (Only one plugin using this function can be loaded) 57# GetResolvedIP is called to resolve an IPv6 address into a host name 58#----------------------------------------------------------------------------- 59sub GetResolvedIP_ipv6 { 60 # <----- 61 my $ip = new Net::IP($_[0]); 62 my $reverseip= $ip->reverse_ip(); 63 my $query = $resolver->query($reverseip, "PTR"); 64 if (! defined($query)) { return; } 65 my @result=split(/\s/, ($query->answer)[0]->string); 66 chop($result[4]); # Remove the trailing dot of the answer. 67 return $result[4]; 68 # -----> 69} 70 71 721; # Do not remove this line 73