There are three ways to get hosts:
1) Pings and Pongs. Some host caches just do that and nothing else. They accept a Gnutella client's connection, wait for a ping, send ~10 pongs (from previously connected clients) back and closes the connection. Any other messages, such as queries, etc, are dropped.
2) GWebCache. This is an HTTP style system, which allows people that have a "shared web hosting account" or their own Web server add a host cache. GWebCache is fairly simple to both implement and use by Gnutella Clients. You can request either a list of hosts (which would be equivalent to Pongs) or a list of URLs, to more registered GWebCaches.
3) The "X-Try" Gnutella v0.6 handshake header. This header simply contains a list of IP:Port combinations. The purpose here, is when the Gnutella client you connect to is full (ie, out of incoming connections), it will still give you a number of other Gnutella clients to try, but does not need a full-fledged Gnutella connection (so at the 2nd handshake part, the connection can be closed with an error instead 200 OK). For more information on the X-Try and other headers, visit
the GDF Database (may require a free Yahoo account).