"Fossies" - the Fresh Open Source Software Archive

Member "nmbscan" (8 Sep 2010, 26871 Bytes) of package /linux/privat/old/nmbscan-1.2.6.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Bash source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/bin/bash
    2 # 
    3 # nmbscan
    4 # 
    5 # Maintainer:
    6 #  Gregoire Barbier <devel@g76r.eu>
    7 # Thanks to:
    8 #  Dave Smith <dave.smith@dsl.pipex.com>
    9 #  Rene Tavera <rtavera@afina.com.mx>
   10 
   11 VERSION="1.2.6"
   12 
   13 PATH=$PATH:/sbin:/usr/sbin
   14 
   15 # disable smb.conf, which can contain options such as "netbios disable"
   16 NMBLOOKUPOPT="-s /dev/null" # disables smb.conf, which can contains
   17 
   18 function show_license
   19 {
   20 cat << EOF
   21     The software nmbscan is an SMB/NetBios network scanner.
   22     Copyright (C) 2001-2006 Gregoire Barbier
   23 
   24     This program is free software; you can redistribute it and/or modify
   25     it under the terms of the GNU General Public License as published by
   26     the Free Software Foundation; version 2.
   27 
   28     This program is distributed in the hope that it will be useful,
   29     but WITHOUT ANY WARRANTY; without even the implied warranty of
   30     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   31     GNU General Public License for more details.
   32 
   33     You should have received a copy of the GNU General Public License
   34     along with this program; if not, write to the Free Software
   35     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
   36 
   37                     -----------------------------
   38 
   39             GNU GENERAL PUBLIC LICENSE
   40                Version 2, June 1991
   41 
   42  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
   43                        51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
   44  Everyone is permitted to copy and distribute verbatim copies
   45  of this license document, but changing it is not allowed.
   46 
   47                 Preamble
   48 
   49   The licenses for most software are designed to take away your
   50 freedom to share and change it.  By contrast, the GNU General Public
   51 License is intended to guarantee your freedom to share and change free
   52 software--to make sure the software is free for all its users.  This
   53 General Public License applies to most of the Free Software
   54 Foundation's software and to any other program whose authors commit to
   55 using it.  (Some other Free Software Foundation software is covered by
   56 the GNU Library General Public License instead.)  You can apply it to
   57 your programs, too.
   58 
   59   When we speak of free software, we are referring to freedom, not
   60 price.  Our General Public Licenses are designed to make sure that you
   61 have the freedom to distribute copies of free software (and charge for
   62 this service if you wish), that you receive source code or can get it
   63 if you want it, that you can change the software or use pieces of it
   64 in new free programs; and that you know you can do these things.
   65 
   66   To protect your rights, we need to make restrictions that forbid
   67 anyone to deny you these rights or to ask you to surrender the rights.
   68 These restrictions translate to certain responsibilities for you if you
   69 distribute copies of the software, or if you modify it.
   70 
   71   For example, if you distribute copies of such a program, whether
   72 gratis or for a fee, you must give the recipients all the rights that
   73 you have.  You must make sure that they, too, receive or can get the
   74 source code.  And you must show them these terms so they know their
   75 rights.
   76 
   77   We protect your rights with two steps: (1) copyright the software, and
   78 (2) offer you this license which gives you legal permission to copy,
   79 distribute and/or modify the software.
   80 
   81   Also, for each author's protection and ours, we want to make certain
   82 that everyone understands that there is no warranty for this free
   83 software.  If the software is modified by someone else and passed on, we
   84 want its recipients to know that what they have is not the original, so
   85 that any problems introduced by others will not reflect on the original
   86 authors' reputations.
   87 
   88   Finally, any free program is threatened constantly by software
   89 patents.  We wish to avoid the danger that redistributors of a free
   90 program will individually obtain patent licenses, in effect making the
   91 program proprietary.  To prevent this, we have made it clear that any
   92 patent must be licensed for everyone's free use or not licensed at all.
   93 
   94   The precise terms and conditions for copying, distribution and
   95 modification follow.
   96 
   97             GNU GENERAL PUBLIC LICENSE
   98    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
   99 
  100   0. This License applies to any program or other work which contains
  101 a notice placed by the copyright holder saying it may be distributed
  102 under the terms of this General Public License.  The "Program", below,
  103 refers to any such program or work, and a "work based on the Program"
  104 means either the Program or any derivative work under copyright law:
  105 that is to say, a work containing the Program or a portion of it,
  106 either verbatim or with modifications and/or translated into another
  107 language.  (Hereinafter, translation is included without limitation in
  108 the term "modification".)  Each licensee is addressed as "you".
  109 
  110 Activities other than copying, distribution and modification are not
  111 covered by this License; they are outside its scope.  The act of
  112 running the Program is not restricted, and the output from the Program
  113 is covered only if its contents constitute a work based on the
  114 Program (independent of having been made by running the Program).
  115 Whether that is true depends on what the Program does.
  116 
  117   1. You may copy and distribute verbatim copies of the Program's
  118 source code as you receive it, in any medium, provided that you
  119 conspicuously and appropriately publish on each copy an appropriate
  120 copyright notice and disclaimer of warranty; keep intact all the
  121 notices that refer to this License and to the absence of any warranty;
  122 and give any other recipients of the Program a copy of this License
  123 along with the Program.
  124 
  125 You may charge a fee for the physical act of transferring a copy, and
  126 you may at your option offer warranty protection in exchange for a fee.
  127 
  128   2. You may modify your copy or copies of the Program or any portion
  129 of it, thus forming a work based on the Program, and copy and
  130 distribute such modifications or work under the terms of Section 1
  131 above, provided that you also meet all of these conditions:
  132 
  133     a) You must cause the modified files to carry prominent notices
  134     stating that you changed the files and the date of any change.
  135 
  136     b) You must cause any work that you distribute or publish, that in
  137     whole or in part contains or is derived from the Program or any
  138     part thereof, to be licensed as a whole at no charge to all third
  139     parties under the terms of this License.
  140 
  141     c) If the modified program normally reads commands interactively
  142     when run, you must cause it, when started running for such
  143     interactive use in the most ordinary way, to print or display an
  144     announcement including an appropriate copyright notice and a
  145     notice that there is no warranty (or else, saying that you provide
  146     a warranty) and that users may redistribute the program under
  147     these conditions, and telling the user how to view a copy of this
  148     License.  (Exception: if the Program itself is interactive but
  149     does not normally print such an announcement, your work based on
  150     the Program is not required to print an announcement.)
  151 
  152 These requirements apply to the modified work as a whole.  If
  153 identifiable sections of that work are not derived from the Program,
  154 and can be reasonably considered independent and separate works in
  155 themselves, then this License, and its terms, do not apply to those
  156 sections when you distribute them as separate works.  But when you
  157 distribute the same sections as part of a whole which is a work based
  158 on the Program, the distribution of the whole must be on the terms of
  159 this License, whose permissions for other licensees extend to the
  160 entire whole, and thus to each and every part regardless of who wrote it.
  161 
  162 Thus, it is not the intent of this section to claim rights or contest
  163 your rights to work written entirely by you; rather, the intent is to
  164 exercise the right to control the distribution of derivative or
  165 collective works based on the Program.
  166 
  167 In addition, mere aggregation of another work not based on the Program
  168 with the Program (or with a work based on the Program) on a volume of
  169 a storage or distribution medium does not bring the other work under
  170 the scope of this License.
  171 
  172   3. You may copy and distribute the Program (or a work based on it,
  173 under Section 2) in object code or executable form under the terms of
  174 Sections 1 and 2 above provided that you also do one of the following:
  175 
  176     a) Accompany it with the complete corresponding machine-readable
  177     source code, which must be distributed under the terms of Sections
  178     1 and 2 above on a medium customarily used for software interchange; or,
  179 
  180     b) Accompany it with a written offer, valid for at least three
  181     years, to give any third party, for a charge no more than your
  182     cost of physically performing source distribution, a complete
  183     machine-readable copy of the corresponding source code, to be
  184     distributed under the terms of Sections 1 and 2 above on a medium
  185     customarily used for software interchange; or,
  186 
  187     c) Accompany it with the information you received as to the offer
  188     to distribute corresponding source code.  (This alternative is
  189     allowed only for noncommercial distribution and only if you
  190     received the program in object code or executable form with such
  191     an offer, in accord with Subsection b above.)
  192 
  193 The source code for a work means the preferred form of the work for
  194 making modifications to it.  For an executable work, complete source
  195 code means all the source code for all modules it contains, plus any
  196 associated interface definition files, plus the scripts used to
  197 control compilation and installation of the executable.  However, as a
  198 special exception, the source code distributed need not include
  199 anything that is normally distributed (in either source or binary
  200 form) with the major components (compiler, kernel, and so on) of the
  201 operating system on which the executable runs, unless that component
  202 itself accompanies the executable.
  203 
  204 If distribution of executable or object code is made by offering
  205 access to copy from a designated place, then offering equivalent
  206 access to copy the source code from the same place counts as
  207 distribution of the source code, even though third parties are not
  208 compelled to copy the source along with the object code.
  209 
  210   4. You may not copy, modify, sublicense, or distribute the Program
  211 except as expressly provided under this License.  Any attempt
  212 otherwise to copy, modify, sublicense or distribute the Program is
  213 void, and will automatically terminate your rights under this License.
  214 However, parties who have received copies, or rights, from you under
  215 this License will not have their licenses terminated so long as such
  216 parties remain in full compliance.
  217 
  218   5. You are not required to accept this License, since you have not
  219 signed it.  However, nothing else grants you permission to modify or
  220 distribute the Program or its derivative works.  These actions are
  221 prohibited by law if you do not accept this License.  Therefore, by
  222 modifying or distributing the Program (or any work based on the
  223 Program), you indicate your acceptance of this License to do so, and
  224 all its terms and conditions for copying, distributing or modifying
  225 the Program or works based on it.
  226 
  227   6. Each time you redistribute the Program (or any work based on the
  228 Program), the recipient automatically receives a license from the
  229 original licensor to copy, distribute or modify the Program subject to
  230 these terms and conditions.  You may not impose any further
  231 restrictions on the recipients' exercise of the rights granted herein.
  232 You are not responsible for enforcing compliance by third parties to
  233 this License.
  234 
  235   7. If, as a consequence of a court judgment or allegation of patent
  236 infringement or for any other reason (not limited to patent issues),
  237 conditions are imposed on you (whether by court order, agreement or
  238 otherwise) that contradict the conditions of this License, they do not
  239 excuse you from the conditions of this License.  If you cannot
  240 distribute so as to satisfy simultaneously your obligations under this
  241 License and any other pertinent obligations, then as a consequence you
  242 may not distribute the Program at all.  For example, if a patent
  243 license would not permit royalty-free redistribution of the Program by
  244 all those who receive copies directly or indirectly through you, then
  245 the only way you could satisfy both it and this License would be to
  246 refrain entirely from distribution of the Program.
  247 
  248 If any portion of this section is held invalid or unenforceable under
  249 any particular circumstance, the balance of the section is intended to
  250 apply and the section as a whole is intended to apply in other
  251 circumstances.
  252 
  253 It is not the purpose of this section to induce you to infringe any
  254 patents or other property right claims or to contest validity of any
  255 such claims; this section has the sole purpose of protecting the
  256 integrity of the free software distribution system, which is
  257 implemented by public license practices.  Many people have made
  258 generous contributions to the wide range of software distributed
  259 through that system in reliance on consistent application of that
  260 system; it is up to the author/donor to decide if he or she is willing
  261 to distribute software through any other system and a licensee cannot
  262 impose that choice.
  263 
  264 This section is intended to make thoroughly clear what is believed to
  265 be a consequence of the rest of this License.
  266 
  267   8. If the distribution and/or use of the Program is restricted in
  268 certain countries either by patents or by copyrighted interfaces, the
  269 original copyright holder who places the Program under this License
  270 may add an explicit geographical distribution limitation excluding
  271 those countries, so that distribution is permitted only in or among
  272 countries not thus excluded.  In such case, this License incorporates
  273 the limitation as if written in the body of this License.
  274 
  275   9. The Free Software Foundation may publish revised and/or new versions
  276 of the General Public License from time to time.  Such new versions will
  277 be similar in spirit to the present version, but may differ in detail to
  278 address new problems or concerns.
  279 
  280 Each version is given a distinguishing version number.  If the Program
  281 specifies a version number of this License which applies to it and "any
  282 later version", you have the option of following the terms and conditions
  283 either of that version or of any later version published by the Free
  284 Software Foundation.  If the Program does not specify a version number of
  285 this License, you may choose any version ever published by the Free Software
  286 Foundation.
  287 
  288   10. If you wish to incorporate parts of the Program into other free
  289 programs whose distribution conditions are different, write to the author
  290 to ask for permission.  For software which is copyrighted by the Free
  291 Software Foundation, write to the Free Software Foundation; we sometimes
  292 make exceptions for this.  Our decision will be guided by the two goals
  293 of preserving the free status of all derivatives of our free software and
  294 of promoting the sharing and reuse of software generally.
  295 
  296                 NO WARRANTY
  297 
  298   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  299 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  300 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  301 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  302 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  303 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  304 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  305 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  306 REPAIR OR CORRECTION.
  307 
  308   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  309 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  310 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  311 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  312 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  313 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  314 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  315 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  316 POSSIBILITY OF SUCH DAMAGES.
  317 
  318              END OF TERMS AND CONDITIONS
  319 
  320         How to Apply These Terms to Your New Programs
  321 
  322   If you develop a new program, and you want it to be of the greatest
  323 possible use to the public, the best way to achieve this is to make it
  324 free software which everyone can redistribute and change under these terms.
  325 
  326   To do so, attach the following notices to the program.  It is safest
  327 to attach them to the start of each source file to most effectively
  328 convey the exclusion of warranty; and each file should have at least
  329 the "copyright" line and a pointer to where the full notice is found.
  330 
  331     <one line to give the program's name and a brief idea of what it does.>
  332     Copyright (C) <year>  <name of author>
  333 
  334     This program is free software; you can redistribute it and/or modify
  335     it under the terms of the GNU General Public License as published by
  336     the Free Software Foundation; either version 2 of the License, or
  337     (at your option) any later version.
  338 
  339     This program is distributed in the hope that it will be useful,
  340     but WITHOUT ANY WARRANTY; without even the implied warranty of
  341     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  342     GNU General Public License for more details.
  343 
  344     You should have received a copy of the GNU General Public License
  345     along with this program; if not, write to the Free Software
  346     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  347 
  348 
  349 Also add information on how to contact you by electronic and paper mail.
  350 
  351 If the program is interactive, make it output a short notice like this
  352 when it starts in an interactive mode:
  353 
  354     Gnomovision version 69, Copyright (C) year name of author
  355     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type \`show w\'.
  356     This is free software, and you are welcome to redistribute it
  357     under certain conditions; type \`show c\' for details.
  358 
  359 The hypothetical commands \`show w\' and \`show c\' should show the appropriate
  360 parts of the General Public License.  Of course, the commands you use may
  361 be called something other than \`show w\' and \`show c\'; they could even be
  362 mouse-clicks or menu items--whatever suits your program.
  363 
  364 You should also get your employer (if you work as a programmer) or your
  365 school, if any, to sign a \"copyright disclaimer\" for the program, if
  366 necessary.  Here is a sample; alter the names:
  367 
  368   Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  369   \`Gnomovision\' (which makes passes at compilers) written by James Hacker.
  370 
  371   <signature of Ty Coon>, 1 April 1989
  372   Ty Coon, President of Vice
  373 
  374 This General Public License does not permit incorporating your program into
  375 proprietary programs.  If your program is a subroutine library, you may
  376 consider it more useful to permit linking proprietary applications with the
  377 library.  If this is what you want to do, use the GNU Library General
  378 Public License instead of this License.
  379 
  380                     -----------------------------
  381 EOF
  382 }
  383 
  384 function get_mac_by_addr_through_arp
  385 {
  386     ping -c 1 $1 > /dev/null 2>&1
  387     V=$(arp -n | grep "\\([^0-9]\\|^\\)$1\\([^0-9]\\|$\\)" | grep '..:..:..:..:..:..' | sed 's/.*\(..:..:..:..:..:..\).*/\1/'|head -1|tr "[a-f-]" "[A-F:]")
  388     if [ "$V" = "00:00:00:00:00:00" ]; then
  389       echo "-"
  390     else
  391       echo ${V:--}
  392     fi
  393 }
  394 
  395 function get_mac_by_addr_through_smb
  396 {
  397     V=$(nmblookup $NMBLOOKUPOPT -A $1 | awk '/MAC Address/{gsub(/-/,":"); print $4}'|head -1|tr "[a-f-]" "[A-F:]")
  398     if [ "$V" = "00:00:00:00:00:00" ]; then
  399       echo "-"
  400     else
  401       echo ${V:--}
  402     fi
  403 }
  404 
  405 function get_server_and_os_by_ip
  406 {
  407     V=$(smbclient -L ${2:-$1} -I $1 -U % 2>&1 | grep '^Domain'| sed 's#.*OS=\[\(.*\)\].*Server=\[\(.*\)\].*#\2/\1#' | head -1)
  408     echo ${V:--/-}
  409 }
  410 
  411 if grep nameserver /etc/resolv.conf > /dev/null 2>&1; then
  412 if [ "$(which host 2>/dev/null)" != "" ]; then
  413 function get_host_by_addr
  414 {
  415     V=$(host "$1" 2>/dev/null | awk '/domain name pointer/{gsub(/\.$/,""); print $5}')
  416     echo ${V:--}
  417 }
  418 else
  419 function get_host_by_addr
  420 {
  421     V=$(nslookup "$1" 2>&1 | awk '/Name:/{n=$2}/name = /{gsub(/\.$/,"");n=$4}END{print n}')
  422     echo ${V:--}
  423 }
  424 fi
  425 else
  426 function get_host_by_addr
  427 {
  428     echo -
  429 }
  430 fi
  431 
  432 function get_host_by_name
  433 {
  434     V=$(ping -c 1 "$1" 2>&1 | egrep '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | \
  435      sed 's/.*[^0-9]\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)[^0-9].*/\1/' | \
  436      head -1)
  437     echo ${V:--}
  438 }
  439 
  440 function get_all_master_browsers
  441 {
  442     nmblookup $NMBLOOKUPOPT -M -- - | awk '/__MSBROWSE__[^ ]*$/ {print $1}'
  443 }
  444 
  445 function get_managed_stations
  446 {
  447     smbclient -L $1 -U % 2>&1| awk '/Server.*Comment/ {sec="server"; next} /^\t+--+/ {next} /^$/ {sec=0} sec=="server" {print $1}'
  448 }
  449 
  450 function get_shares
  451 {
  452     smbclient -L $1 -U % 2>&1| awk '/Sharename.*Type.*Comment/ {sec="share"; next} /^\t+--+/ {next} /^$/ {sec=0} /^\t/ && sec=="share" {out=$1 "/" $2 "/"; for (i=3; i<NF; ++i) out=out $i "_"; if (NF>3) out=out $NF; print out}'
  453 }
  454 
  455 function get_host_by_nmbname
  456 {
  457     V=$(nmblookup $NMBLOOKUPOPT $1 2>&1 | awk '/<00>$/{print $1}')
  458     echo ${V:--}
  459 }
  460 
  461 function get_nmbname
  462 {
  463     V=$(nmblookup $NMBLOOKUPOPT -A $1 2>&1 | awk '/<20>/{print $1;exit 0}')
  464     echo ${V:--}
  465 }
  466 
  467 function get_domain
  468 {
  469     V=$(nmblookup $NMBLOOKUPOPT -A $1 2>&1 | awk '/<1e>/{print $1; exit 0}')
  470     echo ${V:--}
  471 }
  472 
  473 function get_user_candidates_by_ip
  474 {
  475     for USER in $(nmblookup $NMBLOOKUPOPT -A -U $1 $1 2>&1|awk '/<03>/{print $1}'); do
  476     if [ "$USER" != "$2" ]; then
  477         echo "$USER"
  478     fi
  479     done
  480 }
  481 
  482 function show_domains
  483 {
  484     for IP in $(get_all_master_browsers); do
  485     echo "domain $(get_domain $IP)"
  486     done
  487 }
  488 
  489 function show_master_browsers
  490 {
  491     for IP in $(get_all_master_browsers); do
  492     echo "domain $(get_domain $IP)"
  493     echo "  master-browser $(get_nmbname $IP) $IP $(get_host_by_addr $IP)"
  494     done
  495 }
  496 
  497 function show_servers_by_domain
  498 {
  499     for IP in $(get_all_master_browsers); do
  500     echo "domain $(get_domain $IP)"
  501     echo "  master-browser $(get_nmbname $IP) $IP $(get_host_by_addr $IP)"
  502     for NAME in $(get_managed_stations $IP); do
  503         echo "  server $NAME"
  504         IP=$(get_host_by_nmbname $NAME)
  505         if [ "$IP" != "-" ]; then
  506         for ip in $IP; do
  507             echo "    ip-address $ip"
  508                     IPNAME=$(get_host_by_addr $ip)
  509             [ "$IPNAME" != "-" ] && echo "      ip-name $IPNAME"
  510                     MAC=$(get_mac_by_addr_through_smb $ip)
  511             [ "$MAC" != "-" ] && echo "      mac-address $MAC"
  512                     MAC2=$(get_mac_by_addr_through_arp $ip)
  513                     [ "$MAC2" != "-" -a "$MAC2" != "$MAC" ] && \
  514                       echo "      mac-address $MAC2"
  515                     [ "$MAC" != "-" ] && echo "      smb-mac-address $MAC"
  516                     [ "$MAC2" != "-" ] && echo "      arp-mac-address $MAC2"
  517         done
  518         fi
  519             SERVEROS=$(get_server_and_os_by_ip $IP $NAME)
  520             SERVER=${SERVEROS%%/*}
  521         OS=${SERVEROS##*/}
  522         if [ "$SERVER" != "-" ]; then
  523         echo "    server-software $SERVER"
  524         fi
  525         if [ "$OS" != "-" ]; then
  526         echo "    operating-system $OS"
  527         fi
  528             for USER in $(get_user_candidates_by_ip $IP $NAME); do
  529                 echo "    user-candidate $USER"
  530             done
  531             for SHARE in $(get_shares $IP $NAME); do
  532                 SHARENAME=${SHARE%%/*}
  533                 TYPECMT=${SHARE#*/}
  534                 SHARETYPE=${TYPECMT%%/*}
  535                 SHARECMT="$(echo ${TYPECMT#*/}|sed 's/_/ /g')"
  536                 echo "    share $SHARENAME"
  537                 [ "$SHARETYPE" != "" ] && echo "      share-type $SHARETYPE"
  538                 [ "$SHARECMT" != "" ] && echo "      share-comment $SHARECMT"
  539             done
  540     done
  541     done
  542 }
  543 
  544 function show_ip_host
  545 {
  546     IP="$1"
  547     echo "$IP" | egrep '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' > /dev/null 2>&1|| IP="$(get_host_by_name $1)"
  548     if [ "$IP" != "-" ]; then
  549     for ip in $IP; do
  550         echo "domain $(get_domain $ip)"
  551             NAME=$(get_nmbname $ip)
  552         echo "  server $NAME"
  553         IPNAME=$(get_host_by_addr $ip)
  554         echo "    ip-address $ip"
  555         if [ "$IPNAME" != "-" ]; then
  556         echo "      ip-name $IPNAME"
  557         fi
  558             MAC=$(get_mac_by_addr_through_smb $ip)
  559             [ "$MAC" != "-" ] && echo "      mac-address $MAC"
  560             MAC2=$(get_mac_by_addr_through_arp $ip)
  561             [ "$MAC2" != "-" -a "$MAC2" != "$MAC" ] && \
  562               echo "      mac-address $MAC2"
  563             [ "$MAC" != "-" ] && echo "      smb-mac-address $MAC"
  564             [ "$MAC2" != "-" ] && echo "      arp-mac-address $MAC2"
  565             SERVEROS=$(get_server_and_os_by_ip $IP $NAME)
  566             SERVER=${SERVEROS%%/*}
  567             OS=${SERVEROS##*/}
  568         if [ "$SERVER" != "-" ]; then
  569         echo "    server-software $SERVER"
  570         fi
  571         if [ "$OS" != "-" ]; then
  572         echo "    operating-system $OS"
  573         fi
  574     done
  575     for USER in $(get_user_candidates_by_ip $IP $NAME); do
  576         echo "    user-candidate $USER"
  577     done
  578         for SHARE in $(get_shares $IP $NAME); do
  579             SHARENAME=${SHARE%%/*}
  580             TYPECMT=${SHARE#*/}
  581             SHARETYPE=${TYPECMT%%/*}
  582             SHARECMT="$(echo ${TYPECMT#*/}|sed 's/_/ /g')"
  583             echo "    share $SHARENAME"
  584             [ "$SHARETYPE" != "" ] && echo "      share-type $SHARETYPE"
  585             [ "$SHARECMT" != "" ] && echo "      share-comment $SHARECMT"
  586         done
  587     fi
  588 }
  589 
  590 function show_nmb_host
  591 {
  592     for ip in $(get_host_by_nmbname $1); do
  593     show_ip_host $ip
  594     done
  595 }
  596 
  597 function show_usage
  598 {
  599     echo ""
  600     echo "usage :"
  601     echo " $1 -L"
  602     echo "  -L show licence agreement (GPL)"
  603     echo ""
  604     echo " $1 {-d|-m|-a}"
  605     echo "  -d show all domains"
  606     echo "  -m show all domains with master browsers"
  607     echo "  -a show all domains, master browsers, and hosts"
  608     echo ""
  609     echo " $1 {-h|-n} host1 [host2 [...]]"
  610     echo "  -h show information on hosts, known by ip name/address"
  611     echo "  -n show information on hosts, known by nmb name"
  612     echo ""
  613 }
  614 
  615 function check_dependencies
  616 {
  617   for C in ping arp nmblookup smbclient awk egrep grep echo head more sed; do
  618     which $C > /dev/null 2>&1 || echo WARNING: lacking dependency: $C
  619   done
  620   which nslookup > /dev/null 2>&1 || which host > /dev/null 2>&1 || \
  621     echo WARNING: lacking dependency: either nslookup or host
  622 }
  623 
  624 echo "nmbscan version $VERSION - $(hostname) - $(date)"
  625 check_dependencies
  626 case "$1" in 
  627 -d)
  628     show_domains
  629     ;;
  630 -m)
  631     show_master_browsers
  632     ;;
  633 -a)
  634     show_servers_by_domain
  635     ;;
  636 -h)
  637     shift
  638     while [ "$1" != "" ]; do
  639     show_ip_host $1
  640     shift
  641     done
  642     ;;
  643 -n)
  644     shift
  645     while [ "$1" != "" ]; do
  646     show_nmb_host $1
  647     shift
  648     done
  649     ;;
  650 -L)
  651     show_license | more
  652     ;;
  653 *)
  654 show_usage $0
  655 ;;
  656 esac