#!/usr/bin/perl -w #-*-perl-*- use strict; use Win32::TieRegistry; use Net::Netmask; use Socket; my %card; my %regKeys; $Registry->Delimiter("/"); my $network = $Registry->{"LMachine/Software/Microsoft/Windows NT/"}; $network = $network->{"CurrentVersion/NetworkCards/"}; my %cardInfo; my $netCard; foreach ( keys %$network ) { my $foo = $network->{$_}; $card{$foo->GetValue('ServiceName')} = $foo->GetValue('Description'); } foreach $netCard ( keys %card ) { my $Key = $Registry->{"/LMachine/SYSTEM/CurrentControlSet/Services/"}; $Key = $Key->{"Tcpip/Parameters/Interfaces/$netCard/"}; $cardInfo{'dhcp'} = $Key->GetValue("EnableDHCP"); if ( $cardInfo{'dhcp'} eq "0x00000000" ) { $cardInfo{'ipAddr'} = $Key->GetValue("IPAddress"); $cardInfo{'mask'} = $Key->GetValue("SubnetMask"); $cardInfo{'domain'} = $Key->GetValue("Domain") || ""; $cardInfo{'nameServer'} = $Key->GetValue("NameServer") || ""; $cardInfo{'dhcp'} = 'no'; $cardInfo{'gateway'} = $Key->GetValue("DefaultGateway") || ""; $cardInfo{'metric'} = $Key->GetValue("DefaultGatewayMetric") || '1'; } else { $cardInfo{'ipAddr'} = $Key->GetValue("DhcpIPAddress"); $cardInfo{'mask'} = $Key->GetValue("DhcpSubnetMask"); $cardInfo{'domain'} = $Key->GetValue("DhcpDomain") || ""; $cardInfo{'nameServer'} = $Key->GetValue("DhcpNameServer") || ""; $cardInfo{'dhcp'} = 'yes'; $cardInfo{'gateway'} = $Key->GetValue("DhcpDefaultGateway") || ""; $cardInfo{'metric'} = $Key->GetValue("DhcpDefaultGatewayMetric") || '1'; } $cardInfo{'ipAddr'} = removePad ( $cardInfo{'ipAddr'} ); $cardInfo{'mask'} = removePad ( $cardInfo{'mask'} ); my $block = new Net::Netmask ( $cardInfo{'ipAddr'}, $cardInfo{'mask'} ); $cardInfo{'broadcast'} = $block->broadcast(); $cardInfo{'mtu'} = $Key->GetValue("MTU") || 1500; my $type = $Registry->{"LMachine/SYSTEM/CurrentControlSet/Control/"}; $type = $type->{"Class/{4D36E972-E325-11CE-BFC1-08002BE10318}"}; my @members = $type->SubKeyNames; foreach ( @members ) { my $corge = $type->{"$_"}; if ( $corge->GetValue("NetCfgInstanceId") eq $netCard ) { $cardInfo{'flags'} = $corge->GetValue("Characteristics"); my $baz = $corge->{"Ndi/Interfaces/"}; $cardInfo{'media'} = $baz->GetValue("LowerRange"); $cardInfo{'ifno'} = $_; $cardInfo{'ifno'} =~ s/^0+//; $cardInfo{'ifno'} = 0 if $cardInfo{'ifno'} eq ""; $cardInfo{'ifno'} = ( substr $cardInfo{'media'}, 0, 3 ) . $cardInfo{'ifno'}; } } my $netBt = $Registry->{"LMachine/SYSTEM/CurrentControlSet/Services/"}; $netBt = $netBt->{"NetBT/Parameters/Interfaces/Tcpip_$netCard/"}; $cardInfo{'wins'} = $netBt->GetValue("NameServerList") || ""; write; } undef $Registry; exit 0; format STDOUT = @>>>>: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $cardInfo{'ifno'},$card{$netCard} Link encap:@<<<<<<<<<<<<< DHCP:@<< flags:@<<<<<<<<<<<<<<<<<< $cardInfo{'media'}, $cardInfo{'dhcp'}, $cardInfo{'flags'} inet addr:@<<<<<<<<<<<<<< Bcast:@<<<<<<<<<<<<<< Mask:@<<<<<<<<<<<<<<< $cardInfo{'ipAddr'}, $cardInfo{'broadcast'}, $cardInfo{'mask'} gateway:@<<<<<<<<<<<<<<<< MTU:@<<< Metric:@<<< WINS:@<<<<<<<<<<<<<<< $cardInfo{'gateway'}, $cardInfo{'mtu'}, $cardInfo{'metric'}, $cardInfo{'wins'} domain:@<<<<<<<<<<<<<<<<< DNS:@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $cardInfo{'domain'}, $cardInfo{'nameServer'} . sub removePad { my $value = shift; $value =~ s/\x00+$//; return $value; } __END__