$SAMBABIN = "/usr/bin";
for ($i = 0; $i < 2; $i++) { $_ = shift;
if (m/-d|-D/) {
$DEBUG = 1;
} else {
if ($_) {
$BCAST = "-B $_";
}
}
}
sub ipsort {
@t1 = split(/\./,$a);
@t2 = split(/\./,$b);
@t1[3] <=> @t2[3];
}
open(NMBLOOKUP,"$SAMBABIN/nmblookup $BCAST '*'|") ||
die("Can't run nmblookup '*'.\n");
@ipaddrs = sort ipsort grep(s/ \*<00>.*$//,<NMBLOOKUP>);
print "\nIP ADDR NETBIOS NAME WORKGROUP/OS/VERSION $BCAST\n";
print "---------------------------------------------------------------------\n";
foreach $ip (@ipaddrs) {
$ip =~ s/\n//; # strip newline from IP address
open(NMBLOOKUP,"$SAMBABIN/nmblookup -r -A $ip|") ||
die("Can't get nmb name list.\n");
@nmblookup = <NMBLOOKUP>;
close NMBLOOKUP;
@name = grep(/<00> - /,@nmblookup);
$_ = @name[0];
if (not $_) {
open(NMBLOOKUP,"$SAMBABIN/nmblookup -A $ip|") ||
die("Can't get nmb name list.\n");
@nmblookup = <NMBLOOKUP>;
close NMBLOOKUP;
@name = grep(/<00> - /,@nmblookup);
$_ = @name[0];
}
if ($_) { if (/GROUP/) { ($name, $aliases, $type, $length, @addresses) =
gethostbyaddr(pack('C4',split('\.',$ip)),2);
if (! $name) { $name = "unknown nis name";
}
} else {
/(\S+)/;
$name = $1;
}
open(SMB,"$SAMBABIN/smbclient -N -L '$name' -I $ip -U% |") ||
die("Can't do smbclient command.\n");
@smb = <SMB>;
close SMB;
if ($DEBUG) { print "===============================================================\n";
print @nmblookup;
print @smb;
}
@info = grep(/OS=/,@smb);
$_ = @info[0];
if ($_) { s/.*Domain=|OS=|Server=|\n//g; # strip out descriptions to make line shorter
} else {
@name = grep(/<00> - <GROUP>/,@nmblookup);
$_ = @name[0];
if ($_) {
/(\S+)/;
$_ = "[$1]";
} else {
$_ = "Unknown Workgroup";
}
}
if (grep(/<1d>/,@nmblookup)) {
$master = '+'; if (grep(/<1b>/,@nmblookup)) { $master = '*'; }
} else {
$master = ' '; }
print "$ip".' 'x(16-length($ip))."$name".' 'x(14-length($name))."$master"."$_\n";
} else { ($name, $aliases, $type, $length, @addresses) =
gethostbyaddr(pack('C4',split('\.',$ip)),2);
if (! $name) { $name = "unknown nis name";
}
if ($DEBUG) { print "===============================================================\n";
print @nmblookup;
}
print "$ip".' 'x(16-length($ip))."$name\n";
}
}