?? findsmb
字號:
#!/usr/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/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 lookupopen(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 infoprint "\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 if (/GROUP/) { # is it a group name ($name, $aliases, $type, $length, @addresses) = gethostbyaddr(pack('C4',split('\.',$ip)),2); if (! $name) { # could not get name $name = "unknown nis name"; } } else { /(\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]; if ($_) { /(\S+)/; $_ = "[$1]"; } else { $_ = "Unknown Workgroup"; } }# 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"; }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -