use strict;
use warnings;
use DBI;

# Konfiguration lesen
open(CFG,'<', 'connect-db') or die "Oops: $!\n";
chomp(my $username = <CFG>);
chomp(my $password = <CFG>);
chomp(my $database = <CFG>);
close(CFG);

# Zusammenbauen der Datasource: DBI/Modul/Datenbank/Host
my $dsn = 'DBI:mysql:'.$database.':localhost';

# Nun der Connect
my $dbh = DBI->connect($dsn, $username, $password,
		                   { RaiseError => 1,
		                     PrintError => 1,
		                     AutoCommit => 1}
		                  ) or die "Oops: $DBI::errstr\n";

my $ip = $ARGV[0] || die "usage: IPtoC_Ask IP address\n";

if($ip =~ m/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/)
  {
  # IP-Adresse, Land suchen
  my ($ipd, $sql, $cc2, $name);
  $ipd =  unpack('N', pack('C4', split('\.', $ip)));
  $sql = "SELECT CC2, Name FROM IPtoC WHERE IPfrom <= '"
         . $ipd . "' AND IPto >= '" . $ipd . "';";
  ($cc2, $name) = $dbh->selectrow_array($sql);
  $name = ucfirst(lc($name));     # Name schoener ausgeben
  print "$ip: $ipd - $cc2 - $name\n";
  }
else  
  {
  # Land, IP-Adressen suchen
  my ($quad, $from, $to, $cc2, $name, $sql, $sth);
  $ip = uc($ip);
  if (length($ip) == 2)
    { $sql = "SELECT IPfrom, IPto, CC2, Name FROM IPtoC WHERE CC2 = ?;"; }
  else
    { $sql = "SELECT IPfrom, IPto, CC2, Name FROM IPtoC WHERE Name = ?;"; }
  $sth = $dbh->prepare($sql);
  $sth->execute($ip);
  while(($from, $to, $cc2, $name) = $sth->fetchrow_array())
    {
    $name = ucfirst(lc($name));    # Name schoener ausgeben 
    $quad = join('.', unpack('C4', pack('N',$from)));
    print "$quad - ";
    $quad = join('.', unpack('C4', pack('N',$to)));
    print "$quad: $cc2 - $name\n";
    } 
  }
