use Win32::Registry;
use Net::Ping;
# TCP-IP-INFO.PL
# Version 1.3
# Last Updated: 2001/01/03
# Steven Manross
# NT4 and W2K Tested
%Registry = (
'Windows Version' => {'path' => 'Software\Microsoft\Windows NT\CurrentVersion',
'values' => [ qw (CSDVersion CurrentBuildNumber CurrentType CurrentVersion PathName ProductID RegisteredOrganization RegisteredOwner SourcePath SystemRoot) ],
},
'Services Root' => {'path' => 'System\CurrentControlSet\Services',
},
'NetBios' => {'path' => 'System\CurrentControlSet\Services\NetBt',
'adapterpathprefix' => {'4.0' => 'Adapters\\',
'5.0' => 'Parameters\Interfaces\Tcpip_',
},
'values' => {'Adapters' => {'4.0' => [ qw (DHCPNameServer DHCPNameServerBackup NameServer NameServerBackup) ],
'5.0' => [ qw (DHCPNameServerlist NameServerlist NetbiosOptions) ],
},
'Parameters' => {'4.0' => [ qw (EnableDNS EnableLMHOSTS) ],
'5.0' => [ qw (EnableDNS EnableLMHOSTS) ],
},
},
},
'DNS' => {'path' => {'4.0' => 'System\CurrentControlSet\Services\Tcpip\Parameters',
'5.0' => 'System\CurrentControlSet\Services\Tcpip\Parameters',
},
'values' => {'4.0' => [ qw (DhcpDomain
DhcpNameServer
Domain
Hostname
NameServer
SearchList
ForwardBroadcasts
DatabasePath
)
],
'5.0' => [ qw (DatabasePath
DefaultGateway
DhcpDomain
DHCPDefaultGateway
DHCPIPAddress
DHCPNameServer
DHCPServer
DHCPSubnetMask
Domain
EnableDHCP
ForwardBroadcasts
Hostname
IPAddress
NameServer
SearchList
SubnetMask
)
],
},
},
'Tcpip' => {'path' => {'4.0' => 'System\CurrentControlSet\Services',
},
'disabled_nic_values' => {'4.0' => [ qw (Bind
Export
Route
),
],
},
'values' => [qw (DHCPDefaultGateway
DHCPIPAddress
DHCPSubnetMask
ForwardBroadcasts
IPAddress
SubnetMask
),
],
},
'Installed NICs' => {'path' => 'Software\Microsoft\Windows NT\CurrentVersion\NetworkCards',
'values' => [qw (ServiceName Description) ] ,
},
);
if (Win32::IsWinNT()) {
if (@ARGV) {
foreach $item (@ARGV) {
$xxx++;
$Servers{$xxx}=$item;
}
} else {
$LocalMachine=Win32::NodeName();
%Servers = (
1 => $LocalMachine,
);
}
}
foreach $number (keys %Servers) {
$comp_name = $Servers{$number};
$p = Net::Ping->new("icmp");
if ($p->ping($comp_name)) {
$HKEY_LOCAL_MACHINE->Win32::Registry::Connect($comp_name,$Remote_Registry_HKLM);
if ($Remote_Registry_HKLM) {
Network_Config($Remote_Registry_HKLM);
} else {
print "Unable to Connect to HKLM on $comp_name\n";
sleep 3;
}
} else {
print "\tUnable to Ping $comp_name\n";
}
$p->close();
}
exit;
sub Network_Config {
if ($Remote_Registry_HKLM) {
$Remote_Registry_HKLM->Open($Registry{'Windows Version'}{'path'},$Remote_NT_Version);
if ($Remote_NT_Version) {
foreach $cfgentry (@{$Registry{'Windows Version'}{'values'}}) {
$Remote_NT_Version->QueryValueEx($cfgentry,$type,$value);
if ($value) {
$RemoteSystem{'NT Version Info'}{$cfgentry}=$value;
undef ($value);
}
}
}
$Remote_NT_Version->Close;
$Remote_Registry_HKLM->Open($Registry{'Installed NICs'}{'path'},$Installed_NICs);
if ($Installed_NICs) {
$Installed_NICs->GetKeys(\@NicNums);
foreach $number (@NicNums) {
$Installed_NICs->Open($number,$NIC_Name_Data);
if ($NIC_Name_Data) {
$NIC_Name_Data->QueryValueEx('ServiceName',$type,$ServiceName);
foreach $cfgentry (@{$Registry{'Installed NICs'}{'values'}}) {
$NIC_Name_Data->QueryValueEx($cfgentry,$type,$value);
if ($value) {
$RemoteSystem{'Installed NICs'}{$ServiceName}{$cfgentry}=$value;
undef ($value);
}
}
}
}
$NIC_Name_Data->Close;
}
$Installed_NICs->Close;
foreach $nic_service (keys %{$RemoteSystem{'Installed NICs'}}) {
$Remote_Registry_HKLM->Open($Registry{'DNS'}{'path'}{$RemoteSystem{'NT Version Info'}{'CurrentVersion'}},$DNS_Service);
if ($DNS_Service) {
foreach $cfgentry (@{$Registry{'DNS'}{'values'}{$RemoteSystem{'NT Version Info'}{'CurrentVersion'}}}) {
$DNS_Service->QueryValueEx($cfgentry,$type,$value);
if ($value) {
$RemoteSystem{'DNS Info'}{$cfgentry}=$value;
undef ($value);
}
}
$DNS_Service->Close;
}
if ($RemoteSystem{'NT Version Info'}{'CurrentVersion'} eq "5.0") {
$Remote_Registry_HKLM->Open("$Registry{'DNS'}{'path'}{'5.0'}\\Interfaces\\$nic_service",$DNS_Service);
if ($DNS_Service) {
foreach $cfgentry (@{$Registry{'DNS'}{'values'}{'5.0'}}) {
$DNS_Service->QueryValueEx($cfgentry,$type,$value);
if ($value) {
$RemoteSystem{'NetBios'}{$nic_service}{$cfgentry}=$value;
undef ($value);
}
}
$DNS_Service->Close;
}
} elsif ($RemoteSystem{'NT Version Info'}{'CurrentVersion'} eq "4.0") {
$Remote_Registry_HKLM->Open($Registry{'Tcpip'}{'path'}{'4.0'}."\\$nic_service\\Parameters\\Tcpip",$TCP_Service);
if ($TCP_Service) {
$Remote_Registry_HKLM->Open($Registry{'Tcpip'}{'path'}{'4.0'}."\\$nic_service\\Linkage\\Disabled",$Is_Adapter_Disabled);
if ($Is_Adapter_Disabled) {
print "Successful open of Disabled Entry\n";
foreach $disabled_entry (@{$Registry{'Tcpip'}{'disabled_nic_values'}{'4.0'}}) {
if ($Is_Adapter_Disabled->QueryValueEx($disabled_entry,$type,$value)) {
print "Successful Query of Disabled Entry\n";
$RemoteSystem{'NetBios'}{$nic_service}{'disabled'}="Yes";
undef ($value);
}
}
$Is_Adapter_Disabled->Close();
}
foreach $cfgentry (@{$Registry{'Tcpip'}{'values'}}) {
$TCP_Service->QueryValueEx($cfgentry,$type,$value);
if ($value) {
$RemoteSystem{'NetBios'}{$nic_service}{$cfgentry}=$value;
undef ($value);
}
}
}
}
}
$Remote_Registry_HKLM->Open($Registry{'NetBios'}{'path'},$NetBios_Service);
if ($NetBios_Service) {
foreach $nic (keys %{$RemoteSystem{'Installed NICs'}}) {
foreach $subkey (keys %{$Registry{'NetBios'}{'values'}}) {
foreach $cfgentry (@{$Registry{'NetBios'}{'values'}{$subkey}{$RemoteSystem{'NT Version Info'}{'CurrentVersion'}}}) {
if ($subkey eq "Adapters") {
$NetBios_Service->Open($Registry{'NetBios'}{'adapterpathprefix'}{$RemoteSystem{'NT Version Info'}{'CurrentVersion'}}.$nic,$NetBios_Service_subkey);
} elsif ($subkey eq "Parameters") {
$NetBios_Service->Open($subkey,$NetBios_Service_subkey);
}
if ($NetBios_Service_subkey) {
$NetBios_Service_subkey->QueryValueEx($cfgentry,$type,$value);
if ($value) {
$RemoteSystem{'NetBios'}{$nic}{$cfgentry}=$value;
undef ($value);
}
}
}
}
$NetBios_Service_subkey->Close;
}
}
$NetBios_Service->Close;
}
print "\n$comp_name - Windows NT Version $RemoteSystem{'NT Version Info'}{'CurrentVersion'}\n\n";
print "\tDNS Config:\n";
foreach $cfgentry (sort {lc($a) cmp lc($b)} keys %{$RemoteSystem{'DNS Info'}}) {
print "\t $cfgentry - $RemoteSystem{'DNS Info'}{$cfgentry}\n";
if ($cfgentry eq "DhcpDomain") {
$dhcp_domain="Yes";
}
}
if ($dhcp_domain eq "Yes") {
print "\t dhcpfqdn - $RemoteSystem{'DNS Info'}{'Hostname'}.$RemoteSystem{'DNS Info'}{'DhcpDomain'}\n";
} else {
print "\t fqdn - $RemoteSystem{'DNS Info'}{'Hostname'}.$RemoteSystem{'DNS Info'}{'Domain'}\n";
}
print "\n\tNetwork Adapter Information:\n";
foreach $nic_service (sort {lc($a) cmp lc($b)} keys %{$RemoteSystem{'Installed NICs'}}) {
print "\t $nic_service - $RemoteSystem{'Installed NICs'}{$nic_service}{'Description'}\n";
if ($RemoteSystem{'NetBios'}{$nic_service}{'EnableDHCP'} eq "1") {
print "\t DHCP is enabled\n";
delete($RemoteSystem{'NetBios'}{$nic_service}{'EnableDHCP'});
delete($RemoteSystem{'NetBios'}{$nic_service}{'IPAddress'});
}
if ($RemoteSystem{'NetBios'}{$nic_service}{'EnableDNS'} eq "1") {
print "\t Enable DNS for Windows Resolution Active\n";
delete($RemoteSystem{'NetBios'}{$nic_service}{'EnableDNS'});
} else {
print "\t Enable DNS for Windows Resolution Disabled\n";
delete($RemoteSystem{'NetBios'}{$nic_service}{'EnableDNS'});
}
if ($RemoteSystem{'NetBios'}{$nic_service}{'EnableLMHOSTS'} eq "1") {
print "\t LMHOSTS Resolution is enabled\n";
delete($RemoteSystem{'NetBios'}{$nic_service}{'EnableLMHOSTS'});
}
if ($RemoteSystem{'NetBios'}{$nic_service}{'disabled'} eq "Yes") {
print "\n\t ADAPTER is disabled\n\n";
delete($RemoteSystem{'NetBios'}{$nic_service}{'disabled'});
}
foreach $cfgentry (sort {lc($a) cmp lc($b)} keys %{$RemoteSystem{'NetBios'}{$nic_service}} ) {
if ($cfgentry =~ /^(IPAddress|SubnetMask)/ && ($RemoteSystem{'NetBios'}{$nic_service}{$cfgentry} == "0.0.0.0")) {
} else {
print "\t $cfgentry - $RemoteSystem{'NetBios'}{$nic_service}{$cfgentry}\n";
}
}
}
undef (%RemoteSystem);
}