Note: GhostWhiteCrab software and documentation was developed and distributed by a third-party Gnutella open source contributor. Lime Wire LLC does not develop or support GhostWhiteCrab, and offers the information here on limewire.org as an Internet mirror for your convenience as it relates to the Gnutella network.
GhostWhiteCrab
GhostWhiteCrab is a portable, stand-alone GWebCache implemented in C. It is open-source and distributed under a BSD-style license. It was developed as a light-weight replacement for CGI GWebCache implementations in PHP, Perl, ASP etc. Unlike those, GhostWhiteCrab can easily handle millions of transactions per hour while consuming little memory and CPU resources. Although GWebCaches are usually used as bootstrap system for Gnutella, you can use them for any other network as well. GhostWhiteCrab doesn't handle multiple networks at a time, but you can configure it for any network you like.
GhostWhiteCrab is also an UDP Hostcache (UHC) for the Gnutella network. This is the recommended use now as most Gnutella clients support this or have completely switched to this bootstrap method. An UDP hostcache is much lighter weight, especially in terms of traffic. It's possible to run GhostWhiteCrab as UHC instead of a GWebCache, or it can serve as both at the same time.
Please read the documentation carefully and make sure you're aware of all consequences before installing a GWebCache or UDP Hostcache. You have been warned.
Download
Documentation
You'll find the documentation in doc/readme.html. Further information regarding configuration along with examples is in the files examples/example.conf and examples/uhc-only.conf.
- doc/readme.html GhostWhiteCrab Documentation
- examples/example.conf GhostWhiteCrab Example
- examples/uhc-only.conf GhostWhiteCrab UHC Only
Bootstrapping a Bootstrap Cache
Simply copy the reply of a GWebCache to bootstrap your own GWebCache. You should get a list of HTTP URLs. Copy them to the good_url_cache file. Crab will verify the URLs and then propagate those that work in replies to urlfile requests.
In order to bootstrap your UDP Hostcache, put at least one IP address and port of a Gnutella peer or another UDP Hostcache into the peer_cache file. For example:
gnutelladev1.udp-host-cache.com:1234
Another option is feeding it the reply of a GWebCache.
Crab will send an UHC ping to each listed peer in order to acquire more peer addresses. If you use Crab as GWebCache and UDP Hostcache at the same time, this address pool will be shared and both modules will benefit from each other.
Latest Changes
Changes from 0.9.8 to 0.9.9
- [Bugfix] Fixed several bugs in the previous release including a horrible memory leak. That means 0.9.8 was pretty much unusable.
- Fixed compiler warnings, code clean-ups and additional inexpensive consistency checks.
- Reduced some of the default timeouts to more realistic settings.
Changes from 0.9.7r2 to 0.9.8
- [Bugfix] There was an off-by-one bug in the header handling which could cause an assertion failure.
- [New] The address filter can also be used to block certain domains now in addition to IP addresses. For example these two lines would avoid to add any GWebCache URLs at the domain example.com:
*.example.com example.com
- IPv6 sockets are now created with the socket option IPV6_V6ONLY. This prevents that the IPv6 socket clashes with the IPv4 socket if the operating system defaults to support for IPv4-mapped IPv6 addresses.
- The buggy MWebCaches are now discarded unless Crab is configured to run as GWebCache for the "mute" network. These are not GWebCaches but they do not utilize the "net" parameter as they should. Unfortunately, this software seems unmaintained so I decided to add this ugly workaround to GhostWhiteCrab.
Changes from 0.9.7r1 to 0.9.7r2
- [Bugfix] The message buffer used by the DNS helper could fill up and lead to truncated replies causing assertion failure due to bad output.
- URLs with uppercase characters in the path are finally considered invalid GWebCache URLs. This prevents duplicates when GWebCaches are served by servers with case-insensitive filesystems.
Changes from 0.9.7 to 0.9.7r1
- [Bugfix] Even the cached "good" URLs were accidently loaded to the set of bad URLs which caused an empty URL cache for several hours after every restart.
- [Bugfix] Fixed problem with bogus or duplicate alert log messages.
Changes from 0.9.6r1 to 0.9.7
- [Bugfix] Failing URLs were not promptly removed as they should have been in the previous release due to some logic mistake.
- [Bugfix] Crab did not filter out duplicate results from getaddrinfo(3) so that it attempted the same IP address multiple times on failure.
- [Bugfix] Compiling with --use-threads should work again.
- [New] Crab does now take advantage of the SO_ACCEPTFILTER with the "httpready" filter on FreeBSD as well as the TCP_DEFER_ACCEPT socket option on Linux systems. These two features are extremely beneficial because they greatly reduce the amount of active sockets.
- [New] Another TCP-related optimization is the use of socket options TCP_NOPUSH on FreeBSD and TCP_QUICKACK on Linux. This manages to merge the TCP-ACK packet for the HTTP request with the data packet which carries the HTTP response. You gain reduced round-trip and save a bit of traffic.
- [New] Added two new settings: send_from_header and contact_address which can be used to provide contact information along with URL verifications and in templates.
- [New] The lock times for GWebCache and UHC requests is now configurable. See gwc_lock_time and uhc_lock_time. Setting these lower than the default can heavily reduce the amount of memory used.
- [New] You can use tilde-prefixed paths (e.g., ~/path or ~user/path) in the configuration file now.
- [New] Bootstrapping your cache is easier as you can simply drop a plain list of peer addresses into the peer_cache file. You don't have provide timestamps and can even use hostnames. Thus, just copy ~/.gtk-gnutella/ultras of your Gtk-Gnutella installation or insert at least one well-known UHC. The equivalent applies to good_url_cache. You can use a simple list of HTTP URLs. Timestamps or check counts are redundant.
- [New] See examples/uhc-only.conf for a simple configuration example if you want to run a pure UHC without the GWebCache.
- The logs written to uhc_log show both incoming and outgoing traffic now. The size of the packets is shown as well. Incoming PONGs show the RTT (round-trip-time).

