mirror of
https://github.com/samba-team/samba.git
synced 2025-01-26 10:04:02 +03:00
adding findsmb perl script to get info on smb machines on a net
(This used to be commit 4adb00e41abbbaf6eaa014e6a599cb2c8b77d7da)
This commit is contained in:
parent
b4622c8d7b
commit
f0e121d100
129
packaging/SGI/findsmb
Executable file
129
packaging/SGI/findsmb
Executable file
@ -0,0 +1,129 @@
|
||||
#!/bin/perl
|
||||
#
|
||||
# Prints info on all smb responding machines on a subnet.
|
||||
# This script needs to be run on a machine without nmbd running and be
|
||||
# run as root to get correct info from WIN95 clients.
|
||||
#
|
||||
# syntax:
|
||||
# findsmb [subnet broadcast address]
|
||||
#
|
||||
# with no agrument it will list machines on the current subnet
|
||||
#
|
||||
# There will be a "+" in front of the workgroup name for machines that are
|
||||
# local master browsers for that workgroup. There will be an "*" in front
|
||||
# of the workgroup name for machines that are the domain master browser for
|
||||
# that workgroup.
|
||||
#
|
||||
|
||||
$SAMBABIN = "/usr/samba/bin";
|
||||
|
||||
for ($i = 0; $i < 2; $i++) { # test for -d option and broadcast address
|
||||
$_ = shift;
|
||||
if (m/-d|-D/) {
|
||||
$DEBUG = 1;
|
||||
} else {
|
||||
if ($_) {
|
||||
$BCAST = "-B $_";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub ipsort # do numeric sort on last field of IP address
|
||||
{
|
||||
@t1 = split(/\./,$a);
|
||||
@t2 = split(/\./,$b);
|
||||
@t1[3] <=> @t2[3];
|
||||
}
|
||||
|
||||
# look for all machines that respond to a name lookup
|
||||
|
||||
open(NMBLOOKUP,"$SAMBABIN/nmblookup $BCAST '*'|") ||
|
||||
die("Can't run nmblookup '*'.\n");
|
||||
|
||||
# get rid of all lines that are not a response IP address,
|
||||
# strip everything but IP address and sort by last field in address
|
||||
|
||||
@ipaddrs = sort ipsort grep(s/ \*<00>.*$//,<NMBLOOKUP>);
|
||||
|
||||
# print header info
|
||||
|
||||
print "\nIP ADDR NETBIOS NAME WORKGROUP/OS/VERSION $BCAST\n";
|
||||
print "---------------------------------------------------------------------\n";
|
||||
|
||||
foreach $ip (@ipaddrs) # loop through each IP address found
|
||||
{
|
||||
$ip =~ s/\n//; # strip newline from IP address
|
||||
|
||||
# find the netbios names registered by each machine
|
||||
|
||||
open(NMBLOOKUP,"$SAMBABIN/nmblookup -r -A $ip|") ||
|
||||
die("Can't get nmb name list.\n");
|
||||
@nmblookup = <NMBLOOKUP>;
|
||||
close NMBLOOKUP;
|
||||
|
||||
# get the first <00> name
|
||||
|
||||
@name = grep(/<00>/,@nmblookup);
|
||||
$_ = @name[0];
|
||||
if ($_) { # we have a netbios name
|
||||
/(\S+)/;
|
||||
$name = $1;
|
||||
|
||||
# do an smbclient command on the netbios name.
|
||||
|
||||
open(SMB,"$SAMBABIN/smbclient -N -L $name -I $ip -U% |") ||
|
||||
die("Can't do smbclient command.\n");
|
||||
@smb = <SMB>;
|
||||
close SMB;
|
||||
|
||||
if ($DEBUG) { # if -d flag print results of nmblookup and smbclient
|
||||
print "===============================================================\n";
|
||||
print @nmblookup;
|
||||
print @smb;
|
||||
}
|
||||
|
||||
# look for the OS= string
|
||||
|
||||
@info = grep(/OS=/,@smb);
|
||||
$_ = @info[0];
|
||||
if ($_) { # we found response
|
||||
s/Domain=|OS=|Server=|\n//g; # strip out descriptions to make line shorter
|
||||
|
||||
} else { # no OS= string in response (WIN95 client)
|
||||
|
||||
# for WIN95 clients get workgroup name from nmblookup response
|
||||
@name = grep(/<00> - <GROUP>/,@nmblookup);
|
||||
$_ = @name[0];
|
||||
/(\S+)/;
|
||||
$_ = "[$1]";
|
||||
}
|
||||
|
||||
# see if machine registered a local master browser name
|
||||
if (grep(/<1d>/,@nmblookup)) {
|
||||
$master = '+'; # indicate local master browser
|
||||
if (grep(/<1b>/,@nmblookup)) { # how about domain master browser?
|
||||
$master = '*'; # indicate domain master browser
|
||||
}
|
||||
} else {
|
||||
$master = ' '; # not a browse master
|
||||
}
|
||||
|
||||
# line up info in 3 columns
|
||||
|
||||
print "$ip".' 'x(16-length($ip))."$name".' 'x(14-length($name))."$master"."$_\n";
|
||||
|
||||
} else { # no netbios name found
|
||||
# try getting the host name
|
||||
($name, $aliases, $type, $length, @addresses) =
|
||||
gethostbyaddr(pack('C4',split('\.',$ip)),2);
|
||||
if (! $name) { # could not get name
|
||||
$name = "unknown nis name";
|
||||
}
|
||||
if ($DEBUG) { # if -d flag print results of nmblookup
|
||||
print "===============================================================\n";
|
||||
print @nmblookup;
|
||||
}
|
||||
print "$ip".' 'x(16-length($ip))."$name\n";
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ if (@codepage) {
|
||||
}
|
||||
|
||||
# add my local files to the list of binaries to install
|
||||
@bins = sort (@sprogs,@progs,@progs1,@scripts,("sambalp","smbprint"));
|
||||
@bins = sort (@sprogs,@progs,@progs1,@scripts,("findsmb","sambalp","smbprint"));
|
||||
|
||||
# the files installed in docs include all the original files in docs plus all
|
||||
# the "*.doc" files from the source tree
|
||||
@ -92,6 +92,9 @@ while(@bins) {
|
||||
if ($nextfile eq "smbpasswd") {
|
||||
print IDB "f 4555 root sys usr/samba/bin/$nextfile source/$nextfile samba.sw.base\n";
|
||||
}
|
||||
elsif ($nextfile eq "findsmb") {
|
||||
print IDB "f 0755 root sys usr/samba/bin/$nextfile packaging/SGI/$nextfile samba.sw.base\n";
|
||||
}
|
||||
elsif ($nextfile eq "sambalp") {
|
||||
print IDB "f 0755 root sys usr/samba/bin/$nextfile packaging/SGI/$nextfile samba.sw.base\n";
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user