Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: List all network interfaces on the local machine?

by Marza (Vicar)
on May 15, 2002 at 18:07 UTC ( [id://166814]=note: print w/replies, xml ) Need Help??


in reply to List all network interfaces on the local machine?

Dave Roth wrote something that does this.

Here you go.

# GetIP.pl # -------- # This will retrieve all IP Addresses that are bound # to network devices on a specified machine. This includes IPs that +are # bound to any NIC (network card, RAS dail up, etc). # If a particular NIC specifies 0.0.0.0 (typically to indicate that +the # NIC will request an IP via DHCP, PPP, etc) it will be ignored. # ALL IPs are discovered even on cards that are disabled. # # Syntax: # perl GetIP.pl [Machine Name] # # Examples: # perl GetIP.pl # perl GetIP.pl \\server # # 1999.03.09 roth # # Permission is granted to redistribute and modify this code as long + as # the below copyright is included. # # Copyright © 1999 by Dave Roth # Courtesty of Roth Consulting # http://www.roth.net/ use Win32::Registry; %KeyName = ( serviceroot => 'System\CurrentControlSet\Services', tcplink => 'Tcpip\Linkage', tcplink_disabled => 'Tcpip\Linkage\Disabled', tcpparam => 'Tcpip\Parameters', deviceparam_tcp => 'Parameters\Tcpip', ); $Root = $HKEY_LOCAL_MACHINE; if( $Machine = $ARGV[0] ) { $HKEY_LOCAL_MACHINE->Connect( $Machine, $Root ) || die "Could not +connect to the registry on '$Machine'\n"; } if( $Root->Open( $KeyName{serviceroot}, $ServiceRoot ) ) { # Get the device names of the cards tcp is bound to... if( $ServiceRoot->Open( $KeyName{tcplink}, $Links ) ) { my( $Data ); if( $Links->QueryValueEx( "Bind", $DataType, $Data ) ) { $Data =~ s/\n/ /gs; $Data =~ s/\\Device\\//gis; $Data =~ s/^\s+(.*)\s+$/$1/gs; push( @Devices, ( split( /\c@/, $Data ) ) ); } $Links->Close(); } # Get the device names of cards that tcp is bound to but disabled. +.. if( $ServiceRoot->Open( $KeyName{tcplink_disabled}, $Links ) ) { my( $Data ); if( $Links->QueryValueEx( "Bind", $DataType, $Data ) ) { $Data =~ s/\s+//gs; $Data =~ s/\\Device\\//gis; push( @Devices, ( split( /\c@/, $Data ) ) ); } $Links->Close(); } foreach $DeviceName ( @Devices ) { my( $DeviceTCPKey ); if( $ServiceRoot->Open( "$DeviceName\\$KeyName{deviceparam_tcp +}", $DeviceTCPKey ) ) { my( @CardIPs, @CardSubNets ); my( $Data, $iCount, $IPAddress ); # Get the IP addresses... if( $DeviceTCPKey->QueryValueEx( "IPAddress", $DataType, $ +Data ) ) { $Data =~ s/\s+//gm; push( @CardIPs, ( split( /\c@/, $Data ) ) ); } # Get the Subnet masks... if( $DeviceTCPKey->QueryValueEx( "SubnetMask", $DataType, +$Data ) ) { $Data =~ s/\s+//gm; push( @CardSubNets, ( split( /\c@/, $Data ) ) ); } # Push our new found data onto the stack... $iCount = 0; map { my( %Hash ); # We don't want 0.0.0.0 since it means the IP will be +procured via DHCP or something... next if( $_ eq '0.0.0.0' ); $Hash{ip} = $_; $Hash{subnet} = $CardSubNets[$iCount]; push( @IP, \%Hash ); $iCount++; } ( @CardIPs ); $DeviceTCPKey->Close(); } } print "This machine $Machine has the following IP addresses:\n"; foreach $IPStruct ( @IP ) { print "\t$IPStruct->{ip} \t(subnet: $IPStruct->{subnet})\n"; } $ServiceRoot->Close(); }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://166814]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (5)
As of 2025-06-24 04:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.