Re: Modern implementations of control messages (ping, pong etc.)
[email protected] Sat, 8 Aug 2009 23:17:45 +0000 (UTC)
| Newsgroups | gmane.network.gnutella.devel |
|---|---|
| Organization | Home, Grenoble, France |
| Message-ID | <[email protected]> |
Quoting rik_saunderson <[email protected]> from ml.gnutella.dev-forum: :Hi there, :I'm trying to understand how modern gnutella clients send and recieve control :messages (i.e. ping, pong, query, queryhit, push, bye and vendor specific). :Older clients send them over tcp on port 6346, but most modern clients (e.g. :Limewire, Frostwire etc.) no longer do this because it's incredibly easy to block :with a firewall. Additionally, some send control messages over UDP. : :I've looked on the Limewire wiki, and I've tried reading a spec for GUESS that I :found, but I cant find an exact spec. : :My questions are these: :1. How do modern gnutella clients agree on which port to use as the destination :port? It can't just be the Listen-IP filed of a GNUTELLA CONNECT because I have :pcap files of transfers where this data does not appear. Yes, it is the value of Listen-IP or Node headers. Not all servents will send it out though, as it is not mandatory to initiate a connection (since you know the remote IP and port). :2. Is there a spec document with the format of the most common vendor specific :messages (i.e. bytes 0-15 are the servent ID, byte 16 is the length etc.)? Each vendor message will specify the meaning of its payload. For instance, here is the definition of the "GTKG/7v2" message: Name: UDP Connect Back Vendor: GTKG ID: 7 Version: 2 TTL: 1 Payload: unsigned short: port number (little-endian) You see, it clearly mentions that the payload is a single little-endian 2-byte word. :3. Both of the above questions for UDP control messages. UDP control messages are simply Gnutella messages, there are no differences with the ones sent over TCP. Raphael