#!perl -w use strict; use Win32::Lanman; use Data::Dumper; my ($node, $domain, $dc); my $servers_info = []; my $servers = []; my $server_path_hash = {}; $node = Win32::NodeName; $domain = Win32::DomainName; Win32::Lanman::NetGetAnyDCName($node, $domain, \$dc) or die $^E; # get a list of servers Win32::Lanman::NetServerEnum($dc, $domain, SV_TYPE_NT, $servers_info) or die $^E; @{$servers} = map {$_->{name}} @{$servers_info}; print Dumper($servers), "\n"; # get the servers' shares and paths $server_path_hash = get_paths($servers); print Dumper($server_path_hash), "\n"; my ($path, $netname); $path = "C:\\"; $netname = get_netname($node, $path, $server_path_hash); print "Netname for '$path' on '$node' is: $netname\n"; exit; sub get_paths { my $servers = shift; my $hash_ref = {}; foreach my $server (@$servers) { $hash_ref->{$server} = get_server_paths($server); } return $hash_ref; } sub get_server_paths { my $server = shift; my @shares; my $hash_ref = {}; Win32::Lanman::NetShareEnum($server, \@shares) or return; foreach (@shares) { if (defined $_->{path}) { $hash_ref->{$_->{path}} = $_->{netname}; } } return $hash_ref; } sub get_netname_byserver { my ($server, $path, $hash_ref) = @_; return $hash_ref->{$server}->{$path} if exists $hash_ref->{$server}->{$path}; } sub get_netname { my ($path, $hash_ref) = @_; return $hash_ref->{$path} if exists $hash_ref->{$path}; }