CapnBry's PHP Gnutella Search is a simple script written in
PHP 4. It was created on a whim
because I was tired of doing paying work one day, gnutella had
just come out, and I had just finished enough reverse-engineering
of the protocol to do something silly with it.
Full licensing details are available from the main php file (gs.php).
Here is the exciting bits:
License to copy and use this software is granted provided that it
is identified as the "CapnBry's PHP gnutella search" in all material
mentioning or referencing this software or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from CapnBry's PHP gnutella
search" in all material mentioning or referencing the derived work.
The overall gist is that you can do whatever the hell you want with
my code (run a copy of it, build on it) as long as you provide credit
to the author, me. There are a few ways to do this depending on
how nice you want to be:
- Really nice - Place a "based on CapnBry's PHP gnutella search"
line somewhere on your search page. If you wanted to make me really
happy, link it back to this site.
- Moderately nice - Insert a comment in the commonHeader
function before the search form. Something to the effect of:
<!-- Based on CapnBry's PHP gnutella search --> would be
- Just plain nice - Include the PHP source code for the
search somewhere on your site, and just leave the original license
The script connects to a real, live gnutella client running on another
machine to do its searches. This provides the fan-out, since the PHP
script only particpates as a leaf node in the gnutellanet.
The most recent version of the script I've broken into several
peices, since the old code was starting to get unmanagable all in one
file. Here's what I got:
- gs.php - This is the main source file
it contains all of the code for dealing with the gnutellanet, and
requires files below.
- gs_config.php - The configuration
used by all units. Includes database and gnutellanet connection
information. This is where to start hacking the script to
get it running on your box.
- top_n_bottom.php - The common
header and footers for the gnutella search pages. I dunno who didn't
add #include to the original HTTP spec, but they should be shot.
- index_text.php - This is the text
which appears in the main frame when no search is requested. Kinda
like an index.html.
- status_window.php - Functions
for manipulating that groovy status window that pops up while you're
- error_msgs.php - Sometimes the
machine running the host gnutella gets rebooted or crashes. These
are just some pretty error messages for when that happens.
- byte_funcs.php - Since there are no
higher level functions for reading words, integers, and IP addresses
from socket descriptiors in PHP (as far as I know),
I wrote some of my own. A cheesy CoCreateGUID is also included,
and I know, it's not a real Microsoft GUID. Close
enough for our purposes.
- search_history.php - Functions
for saving who searches for what, when, and how many results they get.
Used to build the stats and "Last 10 Searches" stuff. Requires a
MySQL database connection.
- gs_mysql.sql - The MySQL script to
create the gnutella database used by the search history routines.
This may or may not be up to date with what's in my database,
so if you see an inconsistency, lemme know and I'll dump the schema
- links.php - Just the list of links. Not
required, but you'll have to remove the "links" link from the
- gs_old.php - If you're not interested
in creating a MySQL database and putting all these files on your server,
here is the old source which is all in one file and just uses
a flat file to store the last 10 searches. This is unmaintained code
at this point, so don't expect me to be adding features or bug fixes