http://www.perlmonks.org?node_id=150114
Category: NT Admin
Author/Contact Info OzzyOsbourne
Description: Sweep a subnet for the DHCP status of the machines.
# 10.10.01 Sweeps a subnet for the status of DHCP and outputs to DHCPs
+weep.txt
# Usage DHCPsweep.pl [subnet] [outputfile]
# eg. DHCPsweep.pl 10.17.117 DHCPsweep81.txt [enter]

use strict;
use Net::Ping;
use Win32::TieRegistry;

my (%Hash, @accounts);
open OUT, ">$ARGV[1]" or die "can't open outfile\n";

for(10..239){
  my $clsid;
  my $ip="$ARGV[0].$_";
  my $p = Net::Ping->new("icmp",2);
  print OUT "$ip\t";
  print "$ip\t";
  if ($p->ping("$ip")){
      $Registry->Delimiter("/");
      my $NT=$Registry->{"//$ip/HKEY_LOCAL_MACHINE/Software/Microsoft/
+Windows NT/CurrentVersion//CurrentVersion"};
      my $W95=$Registry->{"//$ip/HKEY_LOCAL_MACHINE/Software/Microsoft
+/Windows/CurrentVersion//Version"};
      if ($W95){
          print "\t$W95\t";
          print OUT "\t$W95\t" or die "no print";
      }elsif($NT eq '4.0'){
          print "\tNT $NT\t";
          print OUT "\tNT $NT\t";
          my $services=$Registry->{"//$ip/HKEY_LOCAL_MACHINE/System/Cu
+rrentControlSet/Services/"};
          if ($services){
            for (keys %$services){
              if ((/CPQANC\d/)||(/AMDPCN\d/)||(/DC21X41/)){
                s/\///;
                $clsid=$_;
              }
            }
            my $dhcp=$Registry->{"//$ip/HKEY_LOCAL_MACHINE/System/Curr
+entControlSet/Services/$clsid/parameters/tcpip//enableDHCP"} or print
+ "Can\'t access DHCPEnabled key";
            if ($dhcp eq '0x00000001'){ 
              print "enabled";
              print OUT "enabled";
            }
            if ($dhcp eq '0x00000000'){
              print "DISABLED";
              print OUT "DISABLED";
            }
          }else{
        print OUT "Can\'t access Services Key";
            print "Can\'t access Services Key";
          }
      }elsif($NT eq '5.0'){
          my $machine=$Registry->{"//$ip/HKEY_LOCAL_MACHINE/SYSTEM/Cur
+rentControlSet/Control/ComputerName/ComputerName//ComputerName"};
          print "$machine\t";
          print OUT "$machine\t";
          print "NT $NT\t";
          print OUT "NT $NT\t";
          my $services=$Registry->{"//$ip/HKEY_LOCAL_MACHINE/System/Cu
+rrentControlSet/Services/"};
          if ($services){
            for (keys %$services){
              if (/{/){
                s/\///;
                $clsid=$_;
              }
            }
            my $dhcp=$Registry->{"//$ip/HKEY_LOCAL_MACHINE/System/Curr
+entControlSet/Services/$clsid/parameters/tcpip//enableDHCP"} or print
+ "Can\'t access DHCPEnabled key";
            if ($dhcp eq '0x00000001'){ 
              print "enabled";
              print OUT "enabled";
            }
            if ($dhcp eq '0x00000000'){
              print "DISABLED";
              print OUT "DISABLED";
            }
          }else{
        print OUT "Can\'t access Services Key";
            print "Can\'t access Services Key";
          }
      }else{
      print OUT "--\tCan\'t access Registry";
          print "--\tCan\'t access Registry";
      }
            
      
  }else{
      print "--\tno ping response";
      print OUT "--\tno ping response";
  }
  $p->close();
  print "\n";
  print OUT "\n"
}