Complete description of yahoo instant messaging and chat room protocol
The description below is an overview to the yahoo protocol.
Many things like field seperator, headers etc have been elided in the interest of brevity.
For a more comprehensive and complete description refer to
Y! Protocol Unleased.
Yahoo Instant Messaging protocol
Yahoo IM protocol consists of the following steps :
1. Contacting Yahoo! Server.
2. Sending Login
3. Receiving the strings to encode the login and passwd.
Here the server also sends a Session ID which has to be passed
for every communication with the server.
4. Sending henceworth MD5 encoded strings viz login and passwd along with the session ID.
5. If accepted the server sends buddy list and details of various groups of friends etc. It also sends a couple of cookies.
6. Then the server sends the list of ONLINE buddies along with their status messages.
At this moment you become "Available" and ready to chat.
To send an instant message to a person the following components are sent :
a) the session id
b) length of body
Each of the strings above are seperated by some particular seperator \xc0 \x80
Receiving a message is similar to the above and requires some parsing and unpacking.
Besides there are some other utilities viz
* Go invisible
* Change status
* Ignore user
each of these are achieved by sending a particular string to the server.
Yahoo Chat Protocol
There are number of rooms available on yahoo chat server each with a max capacity of 40-50 and classified accd to some category. The server
keeps track of the number of rooms in each category and assigns them a ID (unique) which is used to connect/join a room.
The hierarchy of rooms is two-leveled (three sometimes).The first level constitutes the Category list and the next level has the room list.
One can get the various room list categories by calling for the URL http://chat.yahoo.com/c/roomlist/catfeed.html
A small output of this looks like :
1600000002 1 Business&Finance 1600004725 1 Computers & Internet 1600008033 1 Cultures & Community 1600043325 2 By Language
1600013556 2 Countries and Cultures 1600307381 2 Crime 1600041694 2 Food and Drink 1600136382 2 Groups 1600014766 3 Lesbians, Gays, and Bisexuals 1600008562 3 Teen 1600063985 2 Issues and Causes 1600016068 1 Entertainment & Arts 1600020948 2 Movies 1600035291 2 Television
1600038063 1 Family & Home 1600052895 1 Games 1600059353 1 Government & Politics 1600060813 1 Health & Wellness
An important point to note is that every category has a ID,name and number of rooms.
To get more information for a particular category (say Computers & Internet)
we send its corresponding ID to the URL :
sample output :
PUBLIC_ROOMS 1600326587 Computers Lobby 1 4:10:8,3:25:11,2:31:19,1:26:11 1604800771 Electronics 1 1:6:3 1600390824 Hackers' Lounge 1 3:8:4,2:18:8,1:27:14
1600326591 Linux, FreeBSD, Solaris 1 2:1:0,1:18:3 1600326592 Macintosh 1 1:6:0 1600326593 Programming 1 2:14:5,1:26:6
1600326590 Surfing The Web 1 9:5:1,8:23:11,7:25:12,6:27:24,5:26:11,4:25:10,3:25:7,2:25:11,1:25:9 1600682177 Web Design 1 2:8:2,1:20:6
1600326595 Windows 1 1:20:10 1600326516 Yahoo! Auctions Chat 1 1:2:0 1600326597 Yahoo! Chat Help 1 2:19:12,1:18:4
PRIVATE_ROOMS 1600004725 change room 1 1:20 1600004725 CraCkers' Lounge 1 1:13 1600004725 Digital_Hackerz Recruiting Room 1 1:7
Gives the list of various public rooms and pvt rooms along with their ID , names , number/count and current population!
Joining a room :
1. A particular packed string is sent to the server along with the name and ID of the room and session ID.
2. If valid the server returns with the list of members in the room
and Yo! we are done.
3.For every message posted in the room, a copy is also sent to you which can be decoded/unpacked and read.
4. You can log out when you wish and the server stops sending you the messages.
For more details :
The complete Yahoo protocol is discussed in this file
Y! Protocol Unleased .
You can also download the perl implementation of the protocol, a console based Yahoo Client made by me!