Whatever

p0fIP2OS.pm

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)