~vcs-imports/samba/main

« back to all changes in this revision

Viewing changes to packaging/SGI/findsmb

  • Committer: jerry
  • Date: 2006-07-14 21:48:39 UTC
  • Revision ID: vcs-imports@canonical.com-20060714214839-586d8c489a8fcead
gutting trunk to move to svn:externals

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/bin/perl
2
 
#
3
 
# Prints info on all smb responding machines on a subnet.
4
 
# This script needs to be run on a machine without nmbd running and be
5
 
# run as root to get correct info from WIN95 clients.
6
 
#
7
 
# syntax:
8
 
#    findsmb [subnet broadcast address]
9
 
#
10
 
# with no agrument it will list machines on the current subnet
11
 
#
12
 
# There will be a "+" in front of the workgroup name for machines that are
13
 
# local master browsers for that workgroup. There will be an "*" in front
14
 
# of the workgroup name for machines that are the domain master browser for
15
 
# that workgroup.
16
 
#
17
 
 
18
 
$SAMBABIN = "/usr/samba/bin";
19
 
 
20
 
for ($i = 0; $i < 2; $i++) {    # test for -d option and broadcast address
21
 
  $_ = shift;
22
 
  if (m/-d|-D/) {
23
 
    $DEBUG = 1;
24
 
  } else  {
25
 
    if ($_) {
26
 
      $BCAST = "-B $_";
27
 
    }
28
 
  }
29
 
}
30
 
 
31
 
sub ipsort                      # do numeric sort on last field of IP address
32
 
{
33
 
  @t1 = split(/\./,$a);
34
 
  @t2 = split(/\./,$b);
35
 
  @t1[3] <=> @t2[3];
36
 
}
37
 
 
38
 
# look for all machines that respond to a name lookup
39
 
 
40
 
open(NMBLOOKUP,"$SAMBABIN/nmblookup $BCAST '*'|") || 
41
 
  die("Can't run nmblookup '*'.\n");
42
 
 
43
 
# get rid of all lines that are not a response IP address,
44
 
# strip everything but IP address and sort by last field in address
45
 
 
46
 
@ipaddrs = sort ipsort grep(s/ \*<00>.*$//,<NMBLOOKUP>);
47
 
 
48
 
# print header info
49
 
 
50
 
print "\nIP ADDR         NETBIOS NAME   WORKGROUP/OS/VERSION $BCAST\n";
51
 
print "---------------------------------------------------------------------\n";
52
 
 
53
 
foreach $ip (@ipaddrs)          # loop through each IP address found
54
 
{
55
 
  $ip =~ s/\n//;                # strip newline from IP address
56
 
 
57
 
# find the netbios names registered by each machine
58
 
 
59
 
  open(NMBLOOKUP,"$SAMBABIN/nmblookup -r -A $ip|") || 
60
 
        die("Can't get nmb name list.\n");
61
 
  @nmblookup = <NMBLOOKUP>;
62
 
  close NMBLOOKUP;
63
 
 
64
 
# get the first <00> name
65
 
 
66
 
  @name = grep(/<00> - /,@nmblookup);
67
 
  $_ = @name[0];
68
 
  if ($_) {                     # we have a netbios name
69
 
    if (/GROUP/) {              # is it a group name
70
 
        ($name, $aliases, $type, $length, @addresses) = 
71
 
        gethostbyaddr(pack('C4',split('\.',$ip)),2);
72
 
        if (! $name) {                  # could not get name
73
 
            $name = "unknown nis name";
74
 
        }
75
 
    } else {
76
 
        /(.{1,15})\s+<00>\s+/;
77
 
        $name = $1;
78
 
    }
79
 
 
80
 
# do an smbclient command on the netbios name.
81
 
 
82
 
    open(SMB,"$SAMBABIN/smbclient -N -L $name -I $ip -U% |") ||
83
 
        die("Can't do smbclient command.\n");
84
 
    @smb = <SMB>;
85
 
    close SMB;
86
 
 
87
 
    if ($DEBUG) {               # if -d flag print results of nmblookup and smbclient
88
 
      print "===============================================================\n";
89
 
      print @nmblookup;
90
 
      print @smb;
91
 
    }
92
 
 
93
 
# look for the OS= string
94
 
 
95
 
    @info = grep(/OS=/,@smb);
96
 
    $_ = @info[0];
97
 
    if ($_) {                           # we found response
98
 
      s/.*Domain=|OS=|Server=|\n//g;    # strip out descriptions to make line shorter
99
 
 
100
 
    } else {                            # no OS= string in response (WIN95 client)
101
 
 
102
 
# for WIN95 clients get workgroup name from nmblookup response
103
 
      @name = grep(/<00> - <GROUP>/,@nmblookup);
104
 
      $_ = @name[0];
105
 
      if ($_) {
106
 
        /(.{1,15})\s+<00>\s+/;
107
 
        $_ = "[$1]";
108
 
      } else {
109
 
        $_ = "Unknown Workgroup";
110
 
      }
111
 
    }
112
 
 
113
 
# see if machine registered a local master browser name
114
 
    if (grep(/<1d>/,@nmblookup)) {
115
 
      $master = '+';                    # indicate local master browser
116
 
      if (grep(/<1b>/,@nmblookup)) {    # how about domain master browser?
117
 
        $master = '*';                  # indicate domain master browser
118
 
      }
119
 
    } else {
120
 
      $master = ' ';                    # not a browse master
121
 
    }
122
 
 
123
 
# line up info in 3 columns
124
 
 
125
 
    print "$ip".' 'x(16-length($ip))."$name".' 'x(14-length($name))."$master"."$_\n";
126
 
 
127
 
  } else {                              # no netbios name found
128
 
# try getting the host name
129
 
    ($name, $aliases, $type, $length, @addresses) = 
130
 
      gethostbyaddr(pack('C4',split('\.',$ip)),2);
131
 
    if (! $name) {                      # could not get name
132
 
      $name = "unknown nis name";
133
 
    }
134
 
    if ($DEBUG) {                       # if -d flag print results of nmblookup
135
 
      print "===============================================================\n";
136
 
      print @nmblookup;
137
 
    }
138
 
    print "$ip".' 'x(16-length($ip))."$name\n";
139
 
  }
140
 
141