package p0fIP2OS;
# 2006-06-01 16:21
use strict;
use DBI;
sub BEGIN {
use Exporter ();
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = qw(&ip2os &ip2osver);
@EXPORT_OK = qw();
%EXPORT_TAGS = ();
}
use vars @EXPORT, @EXPORT_OK;
use vars qw($dbdef $dbuser $dbpass);
$dbdef = "dbi:mysql:database=p0f;host=10.0.7.12";
$dbuser = 'p0f';
$dbpass = '';
sub _sql_select_one_row {
my $sqldb = shift;
my $cmd = shift;
#print "$cmd\n";
return undef unless ($sqldb && $cmd);
my $st = $sqldb->prepare("$cmd");
return undef unless ($st);
$st->execute;
my @res = $st->fetchrow_array;
$st->finish;
return \@res;
}
sub _sql_select_one {
my $res = sql_select_one_row(@_);
return undef unless ($res && @{$res});
return $res->[0];
}
sub ip2os($) {
my ($ip,$uo) = @_;
return undef unless ($ip);
my $os;
my $sqldb = DBI->connect_cached($dbdef,$dbuser,$dbpass);
if ($sqldb) {
$ip = $sqldb->quote($ip);
$os = _sql_select_one($sqldb,"SELECT ip_os FROM iplist WHERE ip_ip=$ip");
}
return $os if ($os);
return $uo if (defined($uo));
return 'unknown';
}
sub ip2osver($) {
my ($ip,$uo,$uv) = @_;
return undef unless ($ip);
my ($os,$ver);
my $sqldb = DBI->connect_cached($dbdef,$dbuser,$dbpass);
if ($sqldb) {
$ip = $sqldb->quote($ip);
my $res = _sql_select_one_row($sqldb,"SELECT ip_os,ip_ver FROM iplist WHERE ip_ip=$ip");
if ($res && @{$res}) {
$os = $res->[0];
$ver = $res->[1] if (@{$res}>1);
}
}
$os = $uo if (defined($uo) && !$os);
$os = 'unknown' unless ($os || defined($uo));
$ver = $uv if (defined($uv) && !$ver);
$ver = '' unless ($ver || defined($uv));
return ($os,$ver);
}
sub END {}
1;
(2008-01-11)