#!/usr/bin/perl

#
# by Pavel Aubuchon-Mendoza, 1998
# root@deviance.org, http://www.deviance.org/
#
# Usage: ./domscan.pl 111.111.111.111 222.222.222.222
#   

$start = $ARGV[0];
$end = $ARGV[1];

if($start eq "" || $end eq "") { &syntax; }

@ip1 = split(/\./,$start);
@ip2 = split(/\./,$end);
$numip1 = &countelm(@ip1);
$numip2 = &countelm(@ip2);

if($numip1 ne 4 || $numip2 ne 4) {
 print "\nMalformed Ip address!\n";
 die "Breaking on bad IP";
 }

$ip1 = ((@ip1[0]*16777216)+(@ip1[1]*65536)+(@ip1[2]*256)+@ip1[3]);
$ip2 = ((@ip2[0]*16777216)+(@ip2[1]*65536)+(@ip2[2]*256)+@ip2[3]);

if($ip2 < $ip1) { die "Give me a break... you can't do that..."; }

print "\nDomain Scanner + http://www.deviance.org\n";
print "Pavel Aubuchon-Mendoza 1998\n";
print "\nScanning from $start to $end\n\n";

$cip = $ip1;
$eip = $ip2+1;

while($cip ne $eip) {
 @bytes = &getquad($cip);
 $packaddr = pack("C4",@bytes);
 ($name,$altnames,$addrtype,$len,@addrlist) = gethostbyaddr($packaddr,2);
 if($name ne "") {
  print "$cip \(@bytes[0]\.@bytes[1]\.@bytes[2]\.@bytes[3])  $name\n";
  }
 $cip++;
 }

sub getquad {
 my($ip) = @_;
 @bytes[0] = int $ip/16777216;
 $rem = $ip % 16777216;
 @bytes[1] = int $rem/65536;
 $rem = $rem % 65536;
 @bytes[2] = int $rem/256;
 $rem = $rem % 256;
 @bytes[3] = $rem;
 @bytes;
 }

sub syntax {
 print "\nDomain Scanner + http://www.deviance.org\n";
 print "Pavel Aubuchon-Mendoza 1998\n\n";
 print "\nSyntax:\n\n";
 print "    ./domscan.pl [starting IP] [ending IP]\n\n";
 print "    Ex : ./domscan.pl 1.1.1.1 1.1.2.36\n\n\n";
 die "Breaking on syntax disp";
 }

sub countelm {
 my(@ip) = @_;
 $count = 0;
 while(@ip[$count] ne "") {
  $count++;
  }
 $count;
 }

