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