Strategy for mapping the neighborhood

David Wuertele dave-gnus at
Wed Oct 29 20:33:22 GMT 2003

Daniel> When I was developing the Celery/Stalk search engine, I found
Daniel> I was unable to reliably map all reachable machines on a given
Daniel> subnet by crawling the hierarchy as you described.

Daniel> The approach I ended up using was to send an NMB ping to the
Daniel> subnet's broadcast address, and index the machines that
Daniel> responded. This approach was not 100% reliable either, but by
Daniel> re-broadcasting periodically and caching data from machines
Daniel> that did not respond to subsequent broadcasts, I was able to
Daniel> discover/track a fairly high percentage of available shares on
Daniel> my local network (across 4 subnets, using their 4 broadcast
Daniel> addresses).

So I guess this means you had hosts on your LAN which did not register
themselves with an LMB.  Why do you think that was?  They must have
been B hosts, or they would have been unreachable, right?  Do B hosts
sometimes not register?

Since B hosts' scope is restricted to the subnet, it seems to me that
you could find them by calling the following libsmbclient fucntions:

  ServerFD = open_socket_in (SOCK_DGRAM, 0, 3,
                             interpret_addr(<my ip addr>), True);
  set_socket_options (ServerFD, "SO_BROADCAST");
  ip_list = name_query (ServerFD, star, 0, 1, 1,
                        *bcast, &count, &flags, NULL);

Of course, this will never find P hosts.  In fact, for some reason, it
doesn't find some M or H hosts.  I'm not sure why.  Can anyone guess
why an M or H host on the subnet would not be discovered by this code?


More information about the samba-technical mailing list