DNS Monitoring Database API
package DNS;
require "SQL.pl";
$ENV{'SYBASE'} = "/usr/local/sybase";
my $data_source = "dbi:Sybase:server=DNS;database=DNS";
my $database_username = "dns";
my $database_password = "dnspass";
# Initialize DBI
#
sub BEGIN
{
use DBI;
}
# Log in to database
#
sub Login
{
&login($data_source,$database_username,$database_password);
}
# Log out of database
#
sub Logout
{
&logout;
}
# Add a hostname
#
sub AddHost
{
my($package,$hostname) = @_;
# Insert the information into the Hosts table.
my $sql = "insert Hosts (Name) values ('$hostname')";
my $HNID = &sql_identity($sql);
# Return the new ID.
return $HNID;
}
# Add an IP address
#
sub AddIP
{
my($package,$IP) = @_;
$IP = $package->ip_to_int($IP);
# Insert the information into the Hosts table.
my $sql = "insert IPs (IP) values ('$IP')";
my $IPID = &sql_identity($sql);
# Return the new ID.
return $IPID;
}
# Map a hostname and IP address together
#
sub Map
{
my($package,$host,$IP) = @_;
my $HNID = $package->GetHNID($host);
my $IPID = $package->GetIPID($package->ip_to_int($IP));
my $MAP = $package->GetMap($HNID,$IPID);
if($MAP)
{
# This one's already here - just update the LastSeen date.
my $sql = "update Mappings set LastSeen = getdate() where ID = $MAP";
return &sql_update($sql);
}
else
{
# New entry - insert data.
my $sql = "
insert Mappings (HNID,IPID,LastSeen)
values($HNID,$IPID,getdate())";
return &sql_identity($sql);
}
}
# Get a mapping
#
sub GetMap
{
my($package,$HNID,$IPID) = @_;
my $sql = "select ID from Mappings where HNID = $HNID and IPID = $IPID";
return &sql_select($sql);
}
# Get hostname from HNID
#
sub GetHostName
{
my ($package,$HNID) = @_;
my $sql = "select Name from Hosts where ID = $HNID";
return &sql_select($sql);
}
# Get HNID from hostname
#
sub GetHNID
{
my($package,$host) = @_;
my $sql = "select ID from Hosts where Name = '$host'";
return &sql_select($sql);
}
# Get IP from IPID
#
sub GetIP
{
my($package,$IPID) = @_;
my $sql = "select IP from IPs where ID = $IPID";
my $IP = &sql_select($sql);
return $package->int_to_ip($IP);
}
# Get IPID from IP
#
sub GetIPID
{
my($package,$IP) = @_;
$IP = $package->ip_to_int($IP);
my $sql = "select ID from IPs where IP = $IP";
return &sql_select($sql);
}
# Get all IPs for a given hostname
#
sub GetIPsForHost
{
my($package,$host) = @_;
my $HNID = $package->GetHNID($host);
my $sql = "select IPID from Mappings where HNID = $HNID";
my @IPIDs = &sql_select($sql);
my @IPs = ();
foreach my $IPID (@IPIDs)
{
push(@IPs,$package->GetIP($IPID));
}
return @IPs;
}
# Convert an IP address from an int to a dotted quad
# Assumes network byte order.
#
sub int_to_ip
{
my($package,$IP) = @_;
return join(".", unpack("C4", pack ("N", $IP)));
}
# Convert an IP address from a dotted quad to an int
# Assumes network byte order.
#
sub ip_to_int
{
my($package,$IP) = @_;
return unpack("N", pack("C4", split/\./, $IP));
}