net.sf.jqql.packets.in
Class ReceiveIMPacket
java.lang.Object
net.sf.jqql.packets.Packet
net.sf.jqql.packets.InPacket
net.sf.jqql.packets.BasicInPacket
net.sf.jqql.packets.in.ReceiveIMPacket
public class ReceiveIMPacket
- extends BasicInPacket
receive IM packet, if is common message, format is
1. header
2. sender QQ number, 4 byte
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, is firend sent, or stranger sent, or system message etc, 2 byte
8. sender QQ version, 2 byte
9. sender QQ number, 4 byte
10. receiver QQ number, 4 byte
11. uid and session key of sender md5 processed, 16 byte
12. common message type, for example is text message of other message, 2 byte
13. session id, 2 byte, if one operate need sending many packet to finish, this id should be same
14. sent time, 4 byte
15. sender face, 2 byte
16. whether has font property, 4 byte, if have commonly is 0x00000001
17. number of message fragment, 1 byte
18. fragment sequence, 1 byte, begin form 1
19. message id, 2 byte, different fragment of one message, id is same
20. message type, it means is natural reply message or auto reply message, 1 byte
21. message text, length = leaved byte - packet tail font property length
22. font property, same as in SendIMPacket
23. tail
åˆ«äººå‘æ¥çš„æ¶ˆæ¯åŒ…,如果是普通消æ¯ï¼Œæ ¼å¼ä¸º
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œæ˜¯å¥½å‹å‘的,还是陌生人å‘的,还是系统消æ¯ç‰ç‰ï¼Œ 2å—节
8. å‘é€è€…QQ版本,2å—节
9. å‘é€è€…çš„QQå·ï¼Œ4å—节
10. 接å—者的QQå·ï¼Œ4å—节
11. md5处ç†çš„å‘逿–¹çš„uidå’Œsession key,16å—节
12. 普通消æ¯ç±»åž‹ï¼Œæ¯”如是文本消æ¯è¿˜æ˜¯å…¶ä»–什么消æ¯ï¼Œ2å—节
13. 会è¯ID,2å—节,如果是一个æ“作需è¦å‘é€å¤šä¸ªåŒ…æ‰èƒ½å®Œæˆï¼Œåˆ™è¿™ä¸ªid必须一致
14. å‘逿—¶é—´ï¼Œ4å—节
15. å‘é€è€…头åƒï¼Œ2å—节
16. æ˜¯å¦æœ‰å—体属性,4å—节,有一般是0x00000001
17. 消æ¯çš„分片数,1å—节
18. 分片åºå·ï¼Œ1å—节,从0开始
19. 消æ¯id,2å—节,åŒä¸€æ¡æ¶ˆæ¯çš„ä¸åŒåˆ†ç‰‡id相åŒ
20. 消æ¯ç±»åž‹ï¼Œè¿™é‡Œçš„类型表示是æ£å¸¸å›žå¤è¿˜æ˜¯è‡ªåŠ¨å›žå¤ä¹‹ç±»çš„ä¿¡æ¯ï¼Œ 1å—节
21. æ¶ˆæ¯æ£æ–‡ï¼Œé•¿åº¦ = 剩余å—节数 - 包尾å—体属性长度
22. å—体属性,和SendIMPacketä¸çš„相åŒ
23. 尾部
if is temp session message
2. sender QQ number, 4 byte
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, 2 byte, here is 0x001F
8. sender QQ number, 4 byte
9. unknown 4 byte
10. sender nickname length, 1 byte
11. sender nickname
12. site name length, 1 byte
13. site name
14. unknown 1 byte
15. sent time, 4 byte
16. fllow factual content length, 2 byte
Note: packe tail has 4 unknown byte, so part 16 length is factual content length, not include that 4 byte
17. message content, length = part 16 - font property length
18. font property, see SendIMPacket
19. unknown 4 byte
20. tail
å¦‚æžœæ˜¯ä¸´æ—¶ä¼šè¯æ¶ˆæ¯
2. å‘é€è€…QQå·ï¼Œ4å—节
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œ2å—节,这里是0x001F
8. å‘é€è€…QQå·ï¼Œ4å—节
9. 未知的4å—节
10. å‘é€è€…昵称长度,1å—节
11. å‘é€è€…昵称
12. Siteå称长度,1å—节
13. Siteåç§°
14. 未知的1å—节
15. å‘逿—¶é—´ï¼Œ4å—节
16. åŽé¢å®žé™…内容的长度,2å—节
Note: 包的结尾有4个未知å—节,所以16部分的长度是实际内容长度,ä¸åŒ…括那4个å—节
17. 消æ¯å†…容,长度 = 16部分 - å—体属性长度
18. å—体属性,å‚è§SendIMPacket
19. 未知的4å—节
20. 尾部
if is group notify
1. header
2. group inside ID, 4 byte
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, is firend sent, or stranger sent, or system message etc, 2 byte
8. group Internet ID, 4 byte
9. group type, 1 byte
10. prerate code, 1 byte
11. receiver QQ number, 4 byte
12. receiver current role, 1 byte
13. tail
如果是群通知
1. 头部
2. 群的内部ID,4å—节
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œæ˜¯å¥½å‹å‘的,还是陌生人å‘的,还是系统消æ¯ç‰ç‰ï¼Œ 2å—节,0x002C
8. 群的外部ID,4å—节
9. 群类型,1å—节
10. æ“作ç ,1å—节
11. 接å—者QQå·ï¼Œ4å—节
12. 接å—者当å‰è§’色,1å—节
13. 尾部
if is signature change notify
1. header
2. sender QQ number, here is 10000, 4 byte
3. receiver QQ number, 4 byte
4. server packet sequence, 4 byte
5. sender IP, 4 byte
6. sender port, 2 byte
7. message type, 2 byte, here is 0x0041
8. QQ number which signature change, 4 byte
9. signature changed time, 4 byte
10. byte length of new signature, byte
11. new signature
12. tail
如果是个性ç¾å改å˜é€šçŸ¥
1. 头部
2. å‘é€è€…QQå·ï¼Œåœ¨è¿™é‡Œæ˜¯10000,4å—节
3. 接å—者QQå·ï¼Œ4å—节
4. æœåŠ¡å™¨ç«¯åŒ…åºå·ï¼Œ4å—节
5. å‘é€è€…IP,4å—节
6. å‘é€è€…端å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œ2å—节,在这里是0x0041
8. 个性ç¾å改å˜çš„QQå·ï¼Œ4å—节
9. 个性ç¾å改å˜çš„æ—¶é—´ï¼Œ4å—节
10. 新个性ç¾åçš„å—节长度,1å—节
11. 新个性ç¾å
12. 尾部
if is system message:
1-7. same sa common message, but part 7 is 0x0030, means is system messge
8. system message type, 1 byte
9. system message length, 1 byte
10.system message
如果是系统消æ¯ï¼š
1-7. 与普通消æ¯ç›¸åŒï¼Œåªä¸è¿‡7是0x0030,表示是系统消æ¯
8. 系统消æ¯ç±»åž‹ï¼Œ1å—节
9. 系统消æ¯é•¿åº¦ï¼Œ1å—节
10. 系统消æ¯
if is mobile SMS coming from mobile fixed, format is:
1. header
2. sender QQ number, 4 byte
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, is firend sent, or stranger sent, or system message etc, 2 byte
8. unknown 1 byte , 0x0
9. sender QQ number, 1 byte
10. sender face, 4 byte
11. sender name, most is 13 byte, not enough fill 0
12. unknown 1 byte, 0x4D
13. message content, 160 byte, if not enough, fill 0
Note: when receive long message, part 13 front two byte is fixed content, since use to mark fragments fo the same message,
but QQ don't handle this field, show this field, since is bug.
14. tail
如果是æ¥è‡ªç»‘å®šæ‰‹æœºçš„æ‰‹æœºçŸæ¶ˆæ¯ï¼Œæ ¼å¼ä¸ºï¼š
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œæ˜¯å¥½å‹å‘的,还是陌生人å‘的,还是系统消æ¯ç‰ç‰ï¼Œ 2å—节,0x000B
8. 未知1å—节,0x0
9. å‘é€è€…QQå·ï¼Œ4å—节
10. å‘é€è€…头åƒï¼Œ2å—节
11. å‘é€è€…å称,最多13å—节,ä¸è¶³åŽé¢è¡¥0
12. 未知的1å—节,0x4D
13. 消æ¯å†…容,160å—节,如果ä¸è¶³ï¼Œå¡«0
æ³¨ï¼šåœ¨æŽ¥æ”¶é•¿æ¶ˆæ¯æ—¶ï¼Œ13部分å‰ä¸¤ä¸ªå—èŠ‚ä¸ºå›ºå®šå†…å®¹ï¼Œä¼¼ä¹Žæ˜¯ç”¨æ¥æ ‡è¯†åŒä¸€æ¶ˆæ¯çš„分片,但是
QQæœ¬èº«å´æ²¡æœ‰å¤„ç†è¿™ä¸ªå—æ®µï¼Œè€Œæ˜¯æŠŠè¿™ä¸ªå—æ®µä¹Ÿæ˜¾ç¤ºå‡ºæ¥äº†ï¼Œä¼¼ä¹Žæ˜¯ä¸ªbug
14. 尾部
if is mobile SMS coming from move QQ user, format is:
1. header
2. sender QQ number, 4 byte
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, is firend sent, or stranger sent, or system message etc, 2 byte
8. unknown 1 byte , 0x0
9. sender QQ number, 1 byte
10. sender face, 4 byte
11. sender name, most is 13 byte, not enough filled 0
12. unknown 1 byte, 0x4D
13. SMS sent time, 4 byte
14. unknown 1 byte, 0x03
15. SMS content, 160 byte, not enough filled 0
Note: when receive long message, part 15 front two byte is fixed content, since use to mark fragments fo the same message,
but QQ don't handle this field, show this field, since is bug.
16. tail
如果是æ¥è‡ªç§»åЍQQç”¨æˆ·çš„æ‰‹æœºçŸæ¶ˆæ¯ï¼Œæ ¼å¼ä¸ºï¼š
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œæ˜¯å¥½å‹å‘的,还是陌生人å‘的,还是系统消æ¯ç‰ç‰ï¼Œ 2å—节,0x0013
8. 未知1å—节
9. å‘é€è€…QQå·ï¼Œ4å—节
10. å‘é€è€…头åƒï¼Œ2å—节
11. å‘é€è€…å称,最多13å—节,ä¸è¶³åŽé¢è¡¥0
12. 未知的1å—节,0x4D
13. çŸä¿¡å‘逿—¶é—´ï¼Œ4å—节
14. 未知1å—节,0x03
15. çŸä¿¡å†…容,160å—节,ä¸è¶³å¡«0
æ³¨ï¼šåœ¨æŽ¥æ”¶é•¿æ¶ˆæ¯æ—¶ï¼Œ15部分å‰ä¸¤ä¸ªå—èŠ‚ä¸ºå›ºå®šå†…å®¹ï¼Œä¼¼ä¹Žæ˜¯ç”¨æ¥æ ‡è¯†åŒä¸€æ¶ˆæ¯çš„分片,但是
QQæœ¬èº«å´æ²¡æœ‰å¤„ç†è¿™ä¸ªå—æ®µï¼Œè€Œæ˜¯æŠŠè¿™ä¸ªå—æ®µä¹Ÿæ˜¾ç¤ºå‡ºæ¥äº†ï¼Œä¼¼ä¹Žæ˜¯ä¸ªbug
16. 尾部
if is mobile SMS coming from move QQ user(use mobile number), format is:
1. header
2. sender QQ number, 4 byte
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, is firend sent, or stranger sent, or system message etc, 2 byte
8. unknown 1 byte , 0x0
9. mobile number of move QQ, 18 byte, not enough filled 0
10. unknown 2 byte
11. SMS sent time, 4 byte
12. unknown 1 byte, 0x03
13. SMS content, 160, not enough filled 0
Note: when receive long message, part 13 front two byte is fixed content, since use to mark fragments fo the same message,
but QQ don't handle this field, show this field, since is bug.
14. tail
如果是æ¥è‡ªç§»åЍQQç”¨æˆ·çš„æ‰‹æœºçŸæ¶ˆæ¯(使用的是手机å·ç )ï¼Œæ ¼å¼ä¸ºï¼š
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œæ˜¯å¥½å‹å‘的,还是陌生人å‘的,还是系统消æ¯ç‰ç‰ï¼Œ 2å—节,0x0014
8. 未知1å—节
9. 移动QQ的手机å·ï¼Œ18å—节,ä¸è¶³è¡¥0
10. 未知的2å—节
11. çŸä¿¡å‘逿—¶é—´ï¼Œ4å—节
12. 未知1å—节,0x03
13. çŸä¿¡å†…容,160å—节,ä¸è¶³å¡«0
æ³¨ï¼šåœ¨æŽ¥æ”¶é•¿æ¶ˆæ¯æ—¶ï¼Œ13部分å‰ä¸¤ä¸ªå—èŠ‚ä¸ºå›ºå®šå†…å®¹ï¼Œä¼¼ä¹Žæ˜¯ç”¨æ¥æ ‡è¯†åŒä¸€æ¶ˆæ¯çš„分片,但是
QQæœ¬èº«å´æ²¡æœ‰å¤„ç†è¿™ä¸ªå—æ®µï¼Œè€Œæ˜¯æŠŠè¿™ä¸ªå—æ®µä¹Ÿæ˜¾ç¤ºå‡ºæ¥äº†ï¼Œä¼¼ä¹Žæ˜¯ä¸ªbug
14. 尾部
if is message coming from common mobile
1. header
2. sender QQ number, 4 byte, here is 10000
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, is firend sent, or stranger sent, or system message etc, 2 byte
8. unknown 1 byte , 0x0
9. sender mobile number, 20 byte, not enough filled 0
10. SMS content, 160, not enough filled 0
Note: when receive long message, part 10 front two byte is fixed content, since use to mark fragments fo the same message,
but QQ don't handle this field, show this field, since is bug.
11. tail
如果是æ¥è‡ªæ™®é€šæ‰‹æœºçš„æ¶ˆæ¯
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节,在这里是10000
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œæ˜¯å¥½å‹å‘的,还是陌生人å‘的,还是系统消æ¯ç‰ç‰ï¼Œ 2å—节,0x000C
8. 未知1å—节,0x0
9. å‘é€è€…手机å·ç ,20å—节,ä¸è¶³å¡«0
10. çŸä¿¡å†…容,160å—节,ä¸è¶³å¡«0
æ³¨ï¼šåœ¨æŽ¥æ”¶é•¿æ¶ˆæ¯æ—¶ï¼Œ15部分å‰ä¸¤ä¸ªå—èŠ‚ä¸ºå›ºå®šå†…å®¹ï¼Œä¼¼ä¹Žæ˜¯ç”¨æ¥æ ‡è¯†åŒä¸€æ¶ˆæ¯çš„分片,但是
QQæœ¬èº«å´æ²¡æœ‰å¤„ç†è¿™ä¸ªå—æ®µï¼Œè€Œæ˜¯æŠŠè¿™ä¸ªå—æ®µä¹Ÿæ˜¾ç¤ºå‡ºæ¥äº†ï¼Œä¼¼ä¹Žæ˜¯ä¸ªbug
11. 尾部
if is transfer file request, format is
1-18. same as common message format, different is part 12, is 0x0035, means is reansfer file request
19. unused part, all 0. 15 byte
20. transfer type, 1 byte
21. connect type, 1 byte
22. internet ip of requester, 4 byte
23. QQ port of requester, 2 byte, if connect type is 0x3, this part haven't
24. first monitor port, 2 byte
25. real IP of requester, 4 byte
26. seconde monitor port, 2 byte
27. space character 0x20
28. space character 0x1F
29. fiel name, random length, not include path name
30. space character 0x1F
31. number of file byte's string form and " byte"
32. tail
å¦‚æžœæ˜¯è¯·æ±‚ä¼ é€æ–‡ä»¶ï¼Œæ ¼å¼ä¸º
1 - 18. ä¸Žæ™®é€šæ¶ˆæ¯æ ¼å¼ç›¸åŒï¼Œå·®åˆ«åªæœ‰12部分,为0x0035ï¼Œè¡¨ç¤ºæ˜¯è¯·æ±‚ä¼ é€æ–‡ä»¶
19. 未用部分,全0,15å—节
20. ä¼ è¾“ç±»åž‹ï¼Œ1å—节
21. 连接方å¼ï¼Œ1å—节
22. 请求者外部ip,4å—节
23. 请求者QQ端å£ï¼Œ2å—节,如果连接方å¼ä¸º0x3,则这个部分没有
24. 第一个监å¬ç«¯å£ï¼Œ2å—节
25. 请求者真实ip,4å—节
26. 第二个监å¬ç«¯å£ï¼Œ2å—节
27. ç©ºæ ¼ç¬¦0x20
28. 分隔符0x1F
29. 文件å,ä¸å®šé•¿ï¼Œä¸åŒ…å«è·¯å¾„å
30. 分隔符0x1F
31. 文件å—节数的å—符串形å¼åŠ â€œ å—节â€
32. 尾部
if is request of receive transfer file, format is
1-18. same as common message format, different is part 12, toward UDP request, is 0x0037
19-26. same as part = 0x0035
27. tail
如果是接å—ä¼ é€æ–‡ä»¶çš„è¯·æ±‚ï¼Œæ ¼å¼ä¸º
1 - 18. ä¸Žæ™®é€šæ¶ˆæ¯æ ¼å¼ç›¸åŒï¼Œå·®åˆ«åªæœ‰12部分,对于UDP请求,为0x0037
19 - 26 å’Œ0x0035时相åŒ
27. 尾部
if is port of notify file transfer, format is
1-18. same as common message format, different is part 12, is 0x003B, means is port of notify file transfer
19-26. same as part = 0x0035
27. tail
å¦‚æžœæ˜¯é€šçŸ¥æ–‡ä»¶ä¼ é€çš„端å£ï¼Œæ ¼å¼ä¸º
1 - 18. ä¸Žæ™®é€šæ¶ˆæ¯æ ¼å¼ç›¸åŒï¼Œå·®åˆ«åªæœ‰12部分,为0x003Bï¼Œè¡¨ç¤ºæ˜¯é€šçŸ¥æ–‡ä»¶ä¼ é€ç«¯å£
19 - 26 å’Œ0x0035时相åŒ
27. 尾部
unknown type group message
1-7. same as common message, only sender QQ equal group inside ID, part 7 is 0x0020
8. group Internet ID, 4 byte
9. group type, 1 byte
10. sender QQ number, 4 byte
11. unknown 2 byte, all 0
12. message sequence, 2 byte
13. message sent time, 4 byte
14. unknown 4 byte
15. follow data length, 2 byte
16. message content ended with 0
17. font property, same as in SendIMPacket
18. tail
未知类型的群消æ¯
1-7. 与普通消æ¯ç›¸åŒï¼Œåªä¸è¿‡å‘é€è€…QQå·ç›¸å½“于是群的内部ID,7部分为0x0020
8. 群外部ID,4å—节
9. 群类型,1å—节
10. å‘é€è€…QQå·ï¼Œ4å—节
11. 未知的两å—节,全0
12. 消æ¯åºå·ï¼Œ2å—节
13. 消æ¯å‘逿—¶é—´ï¼Œ4å—节
14. 未知的4å—节
15. åŽé¢çš„æ•°æ®çš„长度,2å—节
16. 以0结尾的消æ¯å†…容
17. å—体属性,和SendIMPacketä¸çš„相åŒ
18. 尾部
if is discussion group or multiple-User dialogue, belonged temp group, format is
1-7 same as common message, part 7 is 0x002A
8. father group inside ID, 4 byte
9. father group type, 1 byte
10. discussion group inside ID, 4 byte
11. sender QQ number, 4 byte
12. unknown 2 byte
13. message sequence, 2 byte
14. message sent time, 4 byte
15. version ID, 4 byte. It's I define.
use to mark group massege version. for example, at the beginning, there are two persons in group, version is 0,
then I delete one person, version plus one, so become 1. and then I add two persons, version plue 2 become 3.
if I delete one and add another, version plue 2 become 5. why plue 2? cause I did two operate, one is delete, another
is add. client save such a version ID for every group, if receive message greater than my local version ID, send a * packet to request current menber list. so you will see, QQ send temp group message, if menber change, show instant,
by implement like it. this id not only change while change members, but also while change base info, to mean this * * group info have been changed.
16. follow content length
17. content type, 2 byte, 0x0001 means TXT, 0x0002 means has custom face
18. number of message fragments, 1 byte
19. fragment sequence, 1 byte, begin from 0
20. message id, 2 byte, different fragment of one message, id is same
21. 4 byte, unknown
22. message text, length = leaved byte - packet tail font property length
23. font property, same as in SendIMPacket
24. tail
å¦‚æžœæ˜¯è®¨è®ºç»„æˆ–è€…å¤šäººå¯¹è¯æ¶ˆæ¯ï¼Œè®¨è®ºç»„和多人对è¯å±žäºŽä¸´æ—¶ç¾¤ï¼Œæ ¼å¼ä¸º
1 - 7 部分与普通消æ¯ç›¸åŒï¼Œåªä¸è¿‡7部分是0x002A
8. 父群内部ID,4å—节
9. 群类型,1å—节
10. 讨论组内部ID,4å—节
11. å‘é€è€…QQå·ï¼Œ4å—节
12. 未知的两å—节,全0
13. 消æ¯åºå·ï¼Œ2å—节
14. 消æ¯å‘逿—¶é—´ï¼Œ4å—节
15. Version ID, 4å—节,所谓version idï¼Œæ˜¯æˆ‘è¿™é‡Œæ ¹æ®è¿™ä¸ªå—æ®µçš„æ„æ€ä¹±ç¼–的。
å…¶ä½œç”¨ä¸»è¦æ˜¯æ ‡è¯†ç¾¤ä¿¡æ¯çš„版本,比如一开始,群内有两个人,这个时候版本是0ï¼Œç„¶åŽæˆ‘åˆ
除一个人,那么群的版本就è¦åŠ 1ï¼ŒäºŽæ˜¯å°±å˜æˆäº†1ã€‚ç„¶åŽæˆ‘åˆåŠ äº†2个人,于是版本å†åŠ 2å˜æˆ3,
å‡å¦‚我å†åˆ 一个人åˆåŠ ä¸€ä¸ªäººï¼Œé‚£ä¹ˆç‰ˆæœ¬å°±è¦åŠ 2å˜æˆ5了。为什么è¦åŠ 2å‘¢ï¼Œå› ä¸ºæˆ‘åšäº†ä¸¤æ¬¡æ“作,
ä¸€æ¬¡åˆ ï¼Œä¸€æ¬¡åŠ ï¼Œæ‰€ä»¥ç‰ˆæœ¬å·åŠ äº†2ï¼Œä½ å¯èƒ½å¥‡æ€ªï¼šä¸ºä»€ä¹ˆæˆ‘ä¸ä¸€æ¬¡æžå®šï¼Œç„¶åŽç‰ˆæœ¬åŠ 1å•Šï¼Ÿå› ä¸º
QQçš„åè®®å°±æ˜¯è¿™æ ·ï¼Œå®ƒçš„åè®®ä¸èƒ½åŒæ—¶åšåˆ é™¤å’Œæ·»åŠ æˆå‘˜çš„æ“ä½œï¼Œæ™•å§ï¼Ÿæ‰€ä»¥æˆ‘è¦åšä¸¤æ¬¡æ“作,
也就是è¦å‘两个包æ‰èƒ½åˆåŠ äººåˆåˆ 人,所以版本å·åŠ äº†2。客户端对æ¯ä¸€ä¸ªç¾¤éƒ½è¦ä¿å˜è¿™ä¹ˆä¸€ä¸ªversion ID,
一旦收到的消æ¯å¤§äºŽæˆ‘本地的version id,于是就å‘个包过去请求得到目å‰çš„æˆå‘˜åˆ—è¡¨ã€‚æ‰€ä»¥ä½
会看到,QQ在å‘临时群消æ¯çš„æ—¶å€™ï¼Œæˆå‘˜å¦‚æžœå˜åŒ–äº†ï¼Œä¼šå³æ—¶çš„åæ˜ 出æ¥ï¼Œå°±æ˜¯å¦‚æ¤å®žçŽ°çš„äº†ã€‚
这个idä¸å…‰æ˜¯åœ¨ä¿®æ”¹æˆå‘˜çš„æ—¶å€™æ‰å˜ï¼Œä¿®æ”¹åŸºæœ¬ä¿¡æ¯ä¹Ÿç…§æ ·å˜ï¼Œç”¨æ¥è¡¨ç¤ºè¿™ä¸ªç¾¤çš„ä¿¡æ¯ä¿®æ”¹è¿‡äº†ã€‚
16. åŽé¢å†…容的长度
17. Content Type, 2å—节,0x0001表示纯文件,0x0002表示有自定义表情
18. 消æ¯çš„分片数,1å—节
19. 分片åºå·ï¼Œ1å—节,从0开始
20. 消æ¯id,2å—节,åŒä¸€æ¡æ¶ˆæ¯çš„ä¸åŒåˆ†ç‰‡id相åŒ
21. 4å—节,未知
22. æ¶ˆæ¯æ£æ–‡ï¼Œé•¿åº¦ = 剩余å—节数 - 包尾å—体属性长度
23. å—体属性,和SendIMPacketä¸çš„相åŒ
24. 尾部
if is message from example group or leaquer created group, this group all are fixed group, format is
1-7. same as common message, part 7 is 0x002B
8. group Internet ID, 4 byte
9. group type, 1 byte
10. sender QQ number, 4 byte
11. unknown 2 byte
12. message sequence, 2 byte
13. message sent time, 4 byte
14. Version ID ,4 byte
15. follow data length, 2 byte
16. content type, 2 byte, 0x0001 means TXT, 0x0002 means has custom face
17. number of message fragments, 1 byte
18. fragment sequence, 1 byte, begin from 0
19. message id, 2 byte, different fragment of one message, id is same
20. 4 byte, unknown
21. message text, length = leaved byte - packet tail font property length
22. font property, same as in SendIMPacket
23. tail
å¦‚æžœæ˜¯ç¤ºèŒƒç¾¤æˆ–ä¼šå‘˜åˆ›å»ºçš„ç¾¤å‘æ¥çš„æ¶ˆæ¯ï¼Œè¿™äº›ç¾¤éƒ½æ˜¯å›ºå®šç¾¤ï¼Œæ ¼å¼ä¸º
1 - 7 部分与普通消æ¯ç›¸åŒï¼Œåªä¸è¿‡7部分是0x002B
8. 群外部ID,4å—节
9. 群类型,1å—节
10. å‘é€è€…QQå·ï¼Œ4å—节
11. 未知的两å—节
12. 消æ¯åºå·ï¼Œ2å—节
13. 消æ¯å‘逿—¶é—´ï¼Œ4å—节
14. Version ID, 4å—节
15. åŽé¢å†…容的长度
16. Content Type, 2å—节,0x0001表示纯文件,0x0002表示有自定义表情
17. 消æ¯çš„分片数,1å—节
18. 分片åºå·ï¼Œ1å—节,从0开始
19. 消æ¯id,2å—节,åŒä¸€æ¡æ¶ˆæ¯çš„ä¸åŒåˆ†ç‰‡id相åŒ
20. 4å—节,未知
21. æ¶ˆæ¯æ£æ–‡ï¼Œé•¿åº¦ = 剩余å—节数 - 包尾å—体属性长度
22. å—体属性,和SendIMPacketä¸çš„相åŒ
23. 尾部
if is 0x0041, maybe is packet report last connection condition to server, format is
1-27. same as 0x003B, different is command, is 0x0041
如果是0x0041,å¯èƒ½æ˜¯å‘æœåŠ¡å™¨æŠ¥å‘Šæœ€åŽè¿žæŽ¥æƒ…å†µçš„åŒ…ï¼Œæ ¼å¼ä¸º
1 - 27. å’Œ0x003B时相åŒï¼Œå·®åˆ«åªæœ‰å‘½ä»¤ä¸åŒï¼Œä¸º0x0041
if is cancel transfer file request, format is
1-18. same as common format, different at part 12 is 0x0049, means cancel transfer file
19. unused part, all 0, 15 byte
20. fixed byte, 0x65
21. tail
å¦‚æžœæ˜¯å–æ¶ˆä¼ 逿–‡ä»¶è¯·æ±‚ï¼Œæ ¼å¼ä¸ºï¼š
1 - 18. ä¸Žæ™®é€šæ¶ˆæ¯æ ¼å¼ç›¸åŒï¼Œå·®åˆ«åªæœ‰12部分,为0x0049ï¼Œè¡¨ç¤ºæ˜¯å–æ¶ˆä¼ 逿–‡ä»¶
19. 未用部分,全0,15å—节
20. 固定å—节0x65
21. 尾部
if is QQ live message:
1. header
2. sender QQ number, 4 byte, commonly is 10000
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, 2 byte, 0x0018
8. live message type, 2 byte
9. follow content length, 2 byte, exclusive
if part 8 is 0x0100, means common live message
10. live title length, 1 byte
11. title
12. live description length, 1 byte
13. live description
14. live URL length, 1 byte
15, live URL
16. if 10-15 part total length not enough part 9, filled 0
17. tail
if part 8 is 0x0400, means network disk notify
10. title
11. separator, 1 byte, 0x02
12. description
13. separator, 1 byte, 0x02
14. string form of friend QQ number
15. tail
如果是QQç›´æ’æ¶ˆæ¯ï¼š
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节,一般是10000
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œ2å—节,0x0018
8. ç›´æ’æ¶ˆæ¯ç±»åž‹ï¼Œ2å—节
9. åŽé¢çš„内容长度,2å—节,exclusive
如果8部分是0x0100ï¼Œè¡¨ç¤ºæ™®é€šç›´æ’æ¶ˆæ¯
10. ç›´æ’æ ‡é¢˜é•¿åº¦ï¼Œ1å—节
11. æ ‡é¢˜
12. ç›´æ’æè¿°é•¿åº¦ï¼Œ1å—节
13. ç›´æ’æè¿°
14. ç›´æ’URL长度,1å—节
15. ç›´æ’URL
16. 如果10-15éƒ¨åˆ†åŠ èµ·æ¥çš„长度没有超过9部分的值,则åŽé¢éƒ½å¡«0
17. 尾部
如果8部分是0x0400,表示网络硬盘通知
10. æ ‡é¢˜
11. 分隔符,1å—节,0x02
12. æè¿°
13. 分隔符,1å—节,0x02
14. 好å‹çš„QQå·çš„å—符串形å¼
15. 尾部
if is tips of leaquer login
1. header
2. sender QQ number, 4 byte, comomly is 10000
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, 2 byte, 0x0012
8. unknown 1 byte
9. tail
如果是会员登录æç¤º
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节,一般是10000
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œ2å—节,0x0012
8. 未知1å—节
9. 尾部
if is notify of custom face change
1. header
2. sender QQ number, commonly is 10000
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, 2 byte, 0x0049
8. number of face change friends, 1 byte
9. friend QQ number, 4 byte
10. last changed time of friend custom face, 4 byte, is num of seconds from 1970-1-1 to now
11. custom face MD5 value, 16 byte
12. if has more friends, repeat 10-11 part
13. tail
如果是自定义头åƒå˜åŒ–通知
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节,一般是10000
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œ2å—节,0x0049
8. 头åƒå˜åŒ–的好å‹ä¸ªæ•°ï¼Œ1å—节
9. 好å‹QQå·ï¼Œ4å—节
10. è‡ªå®šä¹‰å¤´åƒæœ€åŽæ”¹å˜çš„æ—¶é—´æˆ³ï¼Œ4å—节,为从1970-1-1到现在的秒数
11. 自定义头åƒçš„MD5值,16å—节
12. 如果有更多好å‹ï¼Œé‡å¤10-11部分
13. 尾部
if is notify of friend property change
1. header
2. sender QQ number, 4 byte, commonly is 10000
3. receiver QQ number, 4 byte
4. packet sequence( not sequence when we send, cause it is 4 byte, maybe is total sequence of server)
5. sender IP, if is server transmit, it's server ip, 4 byte
6. sender port, if is server transmit, it's server port, 2 byte
7. message type, 2 byte, 0x001E
9. friend QQ number, 4 byte
10. unknown 16 byte
11. tail
如果是好å‹å±žæ€§æ”¹å˜é€šçŸ¥
1. 头部
2. å‘é€è€…QQå·ï¼Œ4å—节,一般是10000
3. 接收者QQå·ï¼Œ4å—节
4. 包åºå·ï¼ˆå¹¶éžæˆ‘们å‘逿—¶å€™çš„åºå·ï¼Œå› 为这个是4å—节,å¯èƒ½æ˜¯æœåŠ¡å™¨ç«¯å¾—æ€»åºå·ï¼‰
5. å‘é€è€…IP,如果是æœåŠ¡å™¨è½¬å‘的,那么ip就是æœåС噍ip, 4å—节
6. å‘é€è€…端å£ï¼Œå¦‚果是æœåŠ¡å™¨è½¬å‘的,那么就是æœåŠ¡å™¨çš„ç«¯å£ï¼Œ2å—节
7. 消æ¯ç±»åž‹ï¼Œ2å—节,0x001E
8. 好å‹QQå·ï¼Œ4å—节
9. 好å‹å±žæ€§ï¼Œ4å—节
10. 未知的16å—节
11. 尾部
- Author:
- luma
- See Also:
NormalIM
,
NormalIMHeader
,
ReceiveIMHeader
,
ClusterIM
,
FileTransferArgs
,
FileInfo
,
TempSessionIM
,
SMS
,
QQLive
Methods inherited from class net.sf.jqql.packets.BasicInPacket |
decryptBody, encryptBody, getBodyBytes, getCryptographStart, getFamily, getHeadLength, getLength, getTailLength, parseHeader, parseTail, putBody, putHead, putTail, toString |
Methods inherited from class net.sf.jqql.packets.Packet |
dump, equals, getCommand, getHeader, getSequence, getSource, hash, hashCode, isDuplicated, setDuplicated, setHeader, setSequence |
reply
public byte[] reply
empty
public boolean empty
header
public ReceiveIMHeader header
normalHeader
public NormalIMHeader normalHeader
normalIM
public NormalIM normalIM
systemMessageType
public byte systemMessageType
sysMessage
public String sysMessage
fileInfo
public FileInfo fileInfo
fileArgs
public FileTransferArgs fileArgs
transferType
public byte transferType
clusterIM
public ClusterIM clusterIM
externalId
public int externalId
clusterType
public byte clusterType
sender
public int sender
message
public String message
role
public byte role
opCode
public byte opCode
memberQQ
public int memberQQ
signatureOwner
public int signatureOwner
modifiedTime
public int modifiedTime
signature
public String signature
sms
public SMS sms
tempSessionIM
public TempSessionIM tempSessionIM
qqlive
public QQLive qqlive
headChanges
public List<CustomHead> headChanges
propertyChange
public UserPropertyChange propertyChange
ReceiveIMPacket
public ReceiveIMPacket(ByteBuffer buf,
int length,
QQUser user)
throws PacketParseException
- constructed function
æž„é€ å‡½æ•°
- Parameters:
buf
- 缓冲区 // bufferlength
- 包长度 // packet length
- Throws:
PacketParseException
- è§£æžå‡ºé”™ // parse error
getPacketName
public String getPacketName()
- Overrides:
getPacketName
in class BasicInPacket
- Returns:
- descriptive name of packet
包的æè¿°æ€§åç§°
parseBody
protected void parseBody(ByteBuffer buf)
throws PacketParseException
- Description copied from class:
Packet
- parse packet body, from begin position of buf
è§£æžåŒ…体,从buf的开头ä½ç½®è§£æžèµ·
- Specified by:
parseBody
in class Packet
- Parameters:
buf
- ByteBuffer
- Throws:
PacketParseException
- if parse error
如果解æžå‡ºé”™
getMessageCategory
public int getMessageCategory()
- Returns:
- message type
消æ¯ç§ç±»