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"
}