Re: Morpheus feature: partial files from multiple users

Replies:

  • None.

Parents:

On Tue, 24 Jul 2001, Gerald Oskoboiny wrote:

> I am way out of touch with the current capabilities of
> Napster/Gnutella/etc clients, but just saw this:
>
> > After you select the file to download, Morpheus uses
> > Fast Stream technology to piece together the same file
> > from multiple users.
>
> Excellent, I'm glad someone is doing this! I was hoping someone
> would. Hopefully similar features will make it into other clients
> as well. (they may be there already, I dunno)
>
> that's from:
>
> Review: Morpheus (Music City)
> By Colin Stoner 5/29/01
> http://www.mp3newswire.net/stories/2001/morpheus.html
>
> found via
> http://www.mp3newswire.net/stories/2001/topclones.html
> (Morpheus is the top download on CNet)
>
> the rest of the Morpheus review:

[snipped]

So I've been using Morpheus a bit, from a Windows box. Semi-structured
notes / brain dump follow...

Main reaction: I'm slightly baffled as to why the partial-file feature
seems to be considered a proprietary fancy feature, when HTTP/1.1 itself
allows you to request byte-ranges. Kudos to them for actually
implementing and exploiting it interestingly though. Shame there's no
linux client too; not sure if that's because the protocol is considered
proprietary, or because Morpheus/Kazaa form a closed (weakly) ACL'd
network. Either way it isn't hard to talk to a Morpheus installation --
they're just using a subset of HTTP with a few additional
conventions.

After bit of rummaging, it emerges that a running Morpheus installation
opens up a public webserver on port 1214 of your machine. The root page is
a plain (no metadata; that must be elsewhere) HTML directory of the shared
files you're exposing. And it seems to respect the same HTTP headers for
byte ranges that work on my Apache server:

Forzample:

#!/bin/sh
RES=http://koolaid:1214/13221/dead_kennedies-moon_over_marin.mp3
lwp-request -U -e $RES -H 'Range: bytes=3-140'

..grabs a chunk of some MP3. There can't be much more to what they're
doing apart from a metadata exchange convention.  I assume the 'super
peers' to the query routing work.

The HTTP server also leaks out some other data:

danbri@fireball:~ > HEAD http://koolaid:1214/|more
501 Not Implemented
Client-Date: Sun, 07 Oct 2001 12:28:41 GMT
Client-Peer: 10.0.2.19:1214
X-Kazaa-IP: 10.0.2.19:1214
X-Kazaa-Network: MusicCity
X-Kazaa-SupernodeIP: 211.108.87.42:1214
X-Kazaa-Username: dan_bri


...this gives the address of another node, which seems to be another user
rather than some big Napster-esque central server.

danbri@fireball:~ > HEAD http://211.108.87.42:1214/
501 Not Implemented
Client-Date: Sun, 07 Oct 2001 12:32:14 GMT
Client-Peer: 211.108.87.42:1214
X-Kazaa-IP: 211.108.87.42:1214
X-Kazaa-Network: MusicCity
X-Kazaa-Username: xyz1333(*)

So... once you know the address of a Morpheus node, you can get a list of
the resources it shares; and you can get byte-ranges of the thing itself.
The accompanying HTTP headers also include a bunch of metadata including
what seems to be some kind of digest:

danbri@fireball:~ > GET  -e -d -S http://koolaid:1214/13221/dead_kennedies-moon_over_marin.mp3
GET http://koolaid:1214/13221/dead_kennedies-moon_over_marin.mp3 --> 200
OK
Connection: close
Date: Mon, 01 Jan 1990 19:32:40 GMT
Accept-Ranges: bytes
Server: KazaaClient Aug 29 2001 19:44:27
Content-Length: 3551358
Content-Type: audio/mpeg
Last-Modified: Mon, 01 Jan 1990 19:32:40 GMT
Client-Date: Sun, 07 Oct 2001 12:40:53 GMT
Client-Peer: 10.0.2.19:1214
X-Kazaa-IP: 10.0.2.19:1214
X-Kazaa-Network: MusicCity
X-Kazaa-SupernodeIP: 211.108.87.42:1214
X-Kazaa-Username: dan_bri
X-KazaaTag: 5=222
X-KazaaTag: 21=128
X-KazaaTag: 6=DEAD KENNEDIES
X-KazaaTag: 4=Moon Over Marin
X-KazaaTag: 3==sTgebvBMqgbtsBuYifzzJXBktLk=

I'm not sure how to get the metadata on its own (per resource, or per
server), nor how they're dealing with searching. I'd like to know just
enough about what they've done to understand what the server it opens up
on my laptop is doing, and enough so that I can query/search/etc my
Morpheus'd laptop from a linux box. I couldn't find much info by Google.

Has anyone else on fogo taken a look? Shouldn't be a big job for anyone
who knows how to use tcpdump etc properly...

danbri


ps. HTTP spec on range requests:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

(*)I changed this, in a pathetic nod towards stable-door-bolting privacy

HURL: fogo mailing list archives, maintained by Gerald Oskoboiny