飞鸽传书(IPMSG)协议(翻译稿)
来源:互联网 发布:java实现打印功能 编辑:程序博客网 时间:2024/06/06 13:25
http://www.cnblogs.com/hnrainll/archive/2011/05/07/2039567.html
协议声明:
本协议是由日本人Shirouzu Hiroaki (白水 启章)先生编写。
wanpengcoder翻译于Mr.Kanazawa英文文档,转载请注明出处。
http://www.cnblogs.com/wanpeng/ 如有翻译不当之处望提出,以便改进,衷心感谢您。
IP信使传输协议(第9版草案)
1996/02/21
2003/01/14 修订
H.Shirouzu
shirouzu@h.email.ne.jp
Original ipmsg protocol specification is written in Japanese.
最初的飞鸽传书协议说明书是日文书写。
This document was translated by Mr.Kanazawa.
本文档是Mr.Kanazawa.翻译完成。
This document is not verified yet.
本文档尚未被认证。
----------------------------------------------------------------------
IP Messenger communication protocol (Draft-9) 1996/02/21
飞鸽传书传书协议(草案-9) 1996/02/21
Modified 2003/01/14
修订于2003/01/14
H.Shirouzu
白水 启章
shirouzu@h.email.ne.jp
(作者邮箱)
----------------------------------------------------------------------
About IP Messenger
关于飞鸽传书
This is a Send/Receive message service using the TCP/UDP Port.
它是基于TCP/IP端口的收发信息服务。
Characteristics
特点
IP Messenger can be installed in any OS if TCP/IP is used on your machine.
飞鸽传书可以安装在任一使用TCP/IP协议的的操作系统上。
Dynamic member recognition can be done within your network or specified network.
在网络中完成了动态用户识别机制。
You can exchange messages between all IPMsg members.
所有飞鸽用户之间可以相互交换信息。
Function description
功能描述
Use TCP/UDP port(default:2425). See the following descriptions
使用TCP/UDP端口(默认端口:2425)。见下述描述
(Message Send/Receive: UDP, File Send/Receive: TCP)
(信息 发送/接收:UDP, 文件发送/接收:TCP)
1. Command
命令
1) Command functions (Low 8 bits from command number 32 bits)
命令功能(32位命令字的低8位)
IPMSG_NOOPERATION No Operation
没有任何操作
IPMSG_BR_ENTRY Entry to service (Start-up with a Broadcast command)
上线(开始于广播此命令)
IPMSG_BR_EXIT Exit from service (End with a Broadcast command)
下线(结束于广播此命令)
IPMSG_ANSENTRY Notify a new entry
通报新上线
IPMSG_BR_ABSENCE Change absence mode
更改为离开状态
IPMSG_BR_ISGETLIST Search valid sending host members
搜寻有效的主机用户
IPMSG_OKGETLIST Host list sending notice
主机列表发送通知
IPMSG_GETLIST Host list sending request
主机列表发送请求
IPMSG_ANSLIST Host list sending
主机列表发送
IPMSG_SENDMSG Message transmission
消息传送
IPMSG_RECVMSG Message receiving check
接收消息确认
IPMSG_READMSG Message open notice
消息打开通知
IPMSG_DELMSG Message discarded notice
消息丢弃通知
IPMSG_ANSREADMSG Message open confirmation notice(added from version-8 )
消息打开确认通知(版本8中加入)
IPMSG_GETFILEDATA File Transfer request by TCP
基于TCP的文件传送请求
IPMSG_RELEASEFILES Discard attachment file
丢弃(取消)附件文件的接收
IPMSG_GETDIRFILES Attachment hierarchical file request
文件夹传书请求
IPMSG_GETINFO Get IPMSG version info.
飞鸽版本信息
IPMSG_SENDINFO Send IPMSG version info.
传送飞鸽版本信息
IPMSG_GETABSENCEINFO Get absence sentence
获取离线判定
IPMSG_SENDABSENCEINFO Send absence sentence
发送离线判定
IPMSG_GETPUBKEY RSA Public Key Acquisition
公钥获取
IPMSG_ANSPUBKEY RSA Public Key Response
公钥相应
2) Option flag (High 24 bits from command number 32 bits)
选项位(32位命令字的高24位)
IPMSG_ABSENCEOPT Absence mode(Member recognition command)
离开状态(用户识别命令)
IPMSG_SERVEROPT Server(Reserved)
服务器(保留)
IPMSG_DIALUPOPT Send individual member recognition command
发送个人用户识别命令
IPMSG_SENDCHECKOPT Transmission check
传送检查
IPMSG_SECRETOPT Sealed message
封闭信息
IPMSG_READCHECKOPT Sealed message check(added from ver8 )
封闭信息检查(版本8中加入)
IPMSG_PASSWORDOPT Lock
锁
IPMSG_BROADCASTOPT Broadcast message
广播信息
IPMSG_MULTICASTOPT Multi-cast(Multiple casts selection)
多播
IPMSG_NEWMUTIOPT New version multi-cast(reserved)
新版本多播
IPMSG_AUTORETOPT Automatic response(Ping-pong protection)
自动回复
IPMSG_NOLOGOPT No log files
无日志文件
IPMSG_NOADDLISTOPT Notice to the members outside of BR_ENTRY
不在线用户通知
IPMSG_FILEATTACHOPT File attachment
文件附件选项
IPMSG_ENCRYPTOPT Code
编码
IPMSG_NOPOPUPOPT (No longer valid)
(不可用)
IPMSG_RETRYOPT Re-send flag(Use when acquiring HOSTLIST)
重发位(在获取hostlist时使用)
3) Extended code flag (hex format combination)
扩展编码位(十六进制格式组合)
IPMSG_RSA_512
IPMSG_RSA_1024
IPMSG_RSA_2048
IPMSG_RC2_40
IPMSG_RC2_128
IPMSG_RC2_256
IPMSG_BLOWFISH_128
IPMSG_BLOWFISH_256
IPMSG_SIGN_MD5
4) Extended files for attachment (fileattr low 8 bits)
文件附件扩展(文件属性低8位)
IPMSG_FILE_REGULAR
IPMSG_FILE_DIR
IPMSG_FILE_RETPARENT
IPMSG_FILE_SYMLINK
IPMSG_FILE_CDEV
IPMSG_FILE_BDEV
IPMSG_FILE_FIFO
IPMSG_FILE_RESFORK
5) Attachment file extended attribute(fileattr high 24 bits)
附件文件属性(文件属性高24位)
IPMSG_FILE_RONLYOPT
IPMSG_FILE_HIDDENOPT
IPMSG_FILE_EXHIDDENOPT
IPMSG_FILE_ARCHIVEOPT
IPMSG_FILE_SYSTEMOPT
6) Extended file attribute for attachment file
附件文件的扩展文件属性
IPMSG_FILE_UID
IPMSG_FILE_USERNAME
IPMSG_FILE_GID
IPMSG_FILE_GROUPNAME
IPMSG_FILE_PERM
IPMSG_FILE_MAJORNO
IPMSG_FILE_MINORNO
IPMSG_FILE_CTIME
IPMSG_FILE_MTIME
IPMSG_FILE_ATIME
IPMSG_FILE_CREATETIME
IPMSG_FILE_CREATOR
IPMSG_FILE_FILETYPE
IPMSG_FILE_FINDERINFO
IPMSG_FILE_ACL
IPMSG_FILE_ALIASFNAME
IPMSG_FILE_UNICODEFNAME
2.Command format(Use all character strings)
数据包格式(使用字符串形式)
1) Command(Format version-1)
命令(格式 版本-1)
Ver(1) : PacketNo : SenderName : SenderHost : CommandNo : AdditionalSection
版本:包编号:发送者名字:发送主机:命令编号:附加信息区域
2) An example for Message Send/Receive by using the current command format
一个使用当前命令格式收发信息的例子
"1:100:shirouzu:jupiter:32:Hello"
3.Command process overview
数据包过程总览
1) Member recognition
用户识别
An IPMSG_BR_ENTRY command notifies a new entry to the current
members at start-up.
飞鸽启动时IPMSG_BR_ENTRY命令向当前所有用户发送上线通知。
All members add the new member to their list after getting a notification message.
所有用户当受到通知信息时把用户加入列表。
不回发信息。
An IPMSG_ANSENTRY command sends a message back to the new member.
IPMSG_ANSENTRY命令回发到上线新用户。
The new member gets the current member data by a
IPMSG_ANSENTRY command. All members can communicate as long as an
IP packet exists.
新用户通过IPMSG_ANSENTRY命令得到当前在线用户信息。所有用户在IP存在时可以互相通信。
An IPMSG_BR_ABSENCE command broadcasts absence mode cancel or
nickname change to all members. However, an IPMSG_ANSENTRY command
does not send a message back, which is different from an IPMSG_BR_ENTRY
command.
IPMSG_BR_ABSENCE信息广播给所有用户该用户离开状态取消或者昵称改变。但是和IPMSG_BR_ENTRY命令不同的 是IPMSG_BR_ABSENCE命令
IPMSG_BR_ENTRY, IPMSG_ANSENTRY, and IPMSG_BR_ABSENCE commands
use an IPMSG_ABSENCEOPT flag for absence mode. Input a nickname to
additional command.
IPMSG_BR_ENTRY, IPMSG_ANSENTRY, 和 IPMSG_BR_ABSENCE命令使用IPMSG_ABSENCEOPT位for离
开状态。输入昵称到附加命令中。
Add an IPMSG_DIALUPOPT flag for dial-up users who can't be reached by
a broadcast command. A member recognition command needs to be
sent individually to the members with this optional flag.
添加IPMSG_DIALUPOPT位for广播信息不能达到的拨号用户。用户判定命令需要个别发任选位到用户。
(Extended group)IPMSG_BR_ENTRY and IPMSG_BR_ABSENCE commands
sends a group name by adding the new group name after the current
command format character strings (Input '\0' between the current
command and extended name).
(附加组)IPMSG_BR_ENTRY 和 IPMSG_BR_ABSENCE 命令可以发送组名,采用在当前命令格式串后添加组名。
(在当前命令和附加名字之间添加‘\0’)
2) Send/Receive Message
发送/接收信息
Send Message uses an IPMSG_SENDMSG command that can input a message
in the extended area.
使用IPMSG_SENDMSG命令发送信息,采用在扩展区域添加信息。
Receive Message sends back an IPMSG_RECVMSG command only
if an IPMSG_SENDCHECKOPT flag is ON. Input the original packet number
to the extended area.
如果IPMSG_SENDCHECKOPT位打开,接收信息回发IPMSG_RECVMSG命令。添加最初的包编号到扩展区域中。
Broadcast Message Send uses an IPMSG_BOADCASTOPT command
and an IPMSG_SENDMSG flag should be ON.
使用IPMSG_BOADCASTOPT命令发送广播信息,IPMSG_SENDMSG位应该打开。
Auto-Send packet(absence notice) needs to be added to IPMSG_AUTORETOPT
for ping-pong protection. If either one or another packet is ON, then
confirmation/auto-send packet is not sent back.
自动发送包(离开通知)需要添加进IPMSG_AUTORETOPTfor ping-pong 保护,如果一个或者另外一个是打开
状态,
确认/自动发送包不回发。
Send Message Sealing needs to be an IPMSG_SECRETOPT packet ON.
In this case, Receive Message sends an IPMSG_READMSG command.
Input the original packet number to the extended area.
发送信息时 密封需要IPMSG_SECRETOPT包打开。这种情况之下,接收信息发送一个IPMSG_READMSG命令。在
附加
区域加入最初包号。
(Additional IPMSG_NOADDLISTOPT)
(附加 IPMSG_NOADDLISTOPT)
When receiving an IPMSG_SENDMSG packet from a host that is
not on your Send/Receive list, IPMsg will either confirm a host by
sending an IPMSG_BR_ENTRY command or add a host name to
the Send/Receive list.
当接收文件时,来自主机的IPMSG_SENDMSG 包没有在你的发送/接收列表,飞鸽将确认主机通过发送
IPMSG_BR_ENTRY
命令,或者添加主机名到发送/接收列表。
However, single-shot Message Send/Receive action needs to be avoided.
Add an IPMSG_NOADDLISTOPT flag to an IPMSG_SENDMSG command.
但是,单脉冲信息发送/接收行为需要被禁止。添加IPMSG_NOADDLISTOPT位到IPMSG_SENDMSG命令。
(Additional IPMSG_READCHECKOPT from version-8 )
(附加IPMSG_READCHECKOPT来自版本-8)
When an IPMSG_READMSG command contains an IPMSG_READCHECKOPT flag,
IPMsg process is the same as IPMSG_SENDMSG with an
IPMSG_SENDCHECKOPT flag.
当IPMSG_READMSG命令含有IPMSG_READCHECKOPT位,飞鸽处理过程和IPMSG_SENDMSG同样
具有IPMSG_SENDCHECKOPT位。
However, Send Message uses an IPMSG_ANSREADMSG command,
not IPMSG_RECVMSG.
但是,发送信息使用IPMSG_ANSREADMSG命令,不是IPMSG_RECVMSG。
3) Message Send/Receive 亅encrypted extension (Added in the version-9 )
信息发送/接收 加密扩展(在版本-9中加入)
Use the combination of Public-key(RSA) and common key(RC2/Blowfish).
(Encrypted extension area is used in hex format.)
使用公钥和普通密钥的结合。
(加密扩展区域使用十六进制格式)
(Public key acquisition)Send an IPMSG_GETPUBKEY command to Receive
Message. Receive Message gets an IPMSG_ANSPUBKEY that
means receiving RSA public key from Send Message.
(公钥获得)发送IPMSG_GETPUBKEY命令接收文件。接收文件时得到意味着接收到发送端公钥的
命令IPMSG_ANSPUBKEY。
IPMSG_GETPUBKEY/IPMSG_ANSPUBKEY both require the value which is
encryption capability (Exp. IPMSG_RSA_1024) flag uses "OR" at first
part of extension
IPMSG_GETPUBKEY/IPMSG_ANSPUBKEY 都需要加密容量位 在扩展区域的开始处使用OR
。
In addition, In IPMSG_ANSPUBKEY, public key written as EE-NNNNNN
E=Exponent丄N=method)devide by ':'. and Input the Fdelimiter '-'
between E and N.
另外,在IPMSG_ANSPUBKEY中,公钥按照以下形式EE-NNNNNN E=Exponent丄N=method)用':'分开。
同时,
在E和N中间添加‘-’.
This sequence can be skipped after the 2nd Send/Receive process by
普通密钥
memorizing public key and encrypted data.
这个序列可以在第二次发送/接收处理时通过记录公钥和加密信息跳过。
(Encrypted message)After a sender creates a common key that is
supported both sender and receiver, a common key can encrypt a message.
In addition, a receiver's public key encrypts the common key.
(加密信息)当发送方建立一个发送方和接收方的后,它就能加密信息。
另外,接收方的公钥加密
普通密钥
。
(Encrypted message transmission) IPMSG_ENCRYPTOPT is used in
IPMSG_SENDMSG. At the first part of extension, input the value which
is 'or' resoult from Convination of public key and common key type .
Then use common key which encrypt with public key devide by ':'.
Then input message which is eccrypted by public key devide by ':'.
If both supports IPMSG_SIGN_XXX, then add ':' and signeture.
(加密信息传输)IPMSG_ENCRYPTOPT在IPMSG_SENDMSG中使用。在扩展区域的开始,加入
公钥和
普通密钥的or值。然后使用使用以':'为分隔符的公钥加密的
普通密钥
。然后加入使用':'为分隔符的加密
信息。
如果都是IPMSG_SIGN_XXX,则添加‘:’和签名。
Also, In the method of encode padding, PKCS#1ECB key is used for RSA,
::"替代。)
PKCS#5 CBC common key is used for RC2/blowfish.
当然,在编码填充的方法上,PKCS#1ECB被用于RSA,PKCS#5 CBC被用于RC2/blowfish。
Also, The Packet related to Entry manifestation the capability of
ecryption support using IPMSG_ENCRYPTOPT
当然,包关联于使用IPMSG_ENCRYPTOPT加密支持的容量的入口表现
4) Extension with file attachment(Available from version-9 )
文件附件扩展(从版本-9时可以使用)
An IPMSG_SENDMSG command with an IPMSG_FILEATTACHOPT flag for
File transfer (download permission)notification sends a message
with attachment.
Input '\0' after the message and attachment file data.
包含IPMSG_FILEATTACHOPT位的IPMSG_SENDMSG文件传输命令标志着有附件信息。
在信息后和附件信息后加入'\0'
fileID:filename:size:mtime:fileattr[:extend-attr=val1
[,val2...][:extend-attr2=...]]:\a:fileID...
(size, mtime, and fileattr describe hex format.
If a filename contains ':', please replace with "::".)
(大小,修改时间,十六进制描述的文件属性,如果文件名中含有':',请用"
When Receive Message downloads an attachment file, an IPMSG_GETFILEDATA
command requests a data transmission packet to the TCP port that is the same number
as the UDP sending port number. Input packetID:fileID: offset to the extended area.
(Use all hex format.)
当接收信息下载附件文件时,IPMSG_GETFILEDATA命令请求和UDP一样的TCP数据传输包端口。在扩展区域
添加packetID:fileID: offset(均使用十六进制格式)
File Transfer side receives the request. After recognizing that it's a correct request,
then send the specified data (no format)
文件发送方收到请求。当判定它是正确的请求之后发送指定数据。(无格式)
When the data receiving side downloads a hierarchical attachment file,
use an IPMSG_GETDIRFILES command and input a packetID:fileID
to the extended area and send a data transmission request packet.
(all hex format)
当数据接收方下载划分的附件文件时,使用IPMSG_GETDIRFILES命令,并且将packetID:fileID写入扩展区域,
发送数据
传输请求包。(均使用十六进制)
Data sending side sends the following hierarchical data format.
数据发送方发送下面划分的数据格式:
header-size:filename:file-size:fileattr[:extend-attr=val1
[,val2...][:extend-attr2=...]]:contents-data
Next headersize: Next filename...
(All hex format except for filename and contetns-data)
(除了文件名和内容数据之外均使用十六进制格式)
header-size is from the beginning of header-size to the delimiter ':'
that is before contents-data. extend-attr can be omitted and used multiple
extended attributes. Use '=' for data input.
头-大小是从头-大小开始到内容数据前的分隔符':'结束。扩展属性可以忽略并且使用多扩展属性。使用'='for 数
据输入。
When fileattr is IPMSG_FILE_DIR, IPMsg recognizes that it is automatically
in the directory, the next file data is after the directory.
当文件属性是IPMSG_FILE_DIR,飞鸽判定它是自动在目录中,下一个文件数据在目录之后。
When fileattr is IPMSG_FILE_RETPARENT, IMPsg recognizes that it returns
to the parent directory. In this case, File name is always "." and the attribute
value is the current directory data.
当文件属性是IPMSG_FILE_RETPARENT,飞鸽判定它返回到父目录。在这种情况之下,文件名总是'.'并且属性值
是当前目录信息。
Sending process starts from the attachment directly and returns the
IPMSG_FILE_RETPARENT command to the attachment directory.
发送过程直接开始于附件并且返回IPMSG_FILE_RETPARENT命令到附件目录。
Add an IPMSG_FILEATTACHOPT flag for an Entry packet to support the
attachment file.
添加IPMSG_FILEATTACHOPT位for入口包来支持附件文件。
5) Other commands
其他命令
When acquiring different versions, send an IPMSG_GETINFO command.
Receiving side sends the version information character string to
extended area.
当获得不同的版本时,发送IPMSG_GETINFO命令。接收方发送版本信息字符串到扩展区域。
Send an IPMSG_GETABSENCEINFO command for acquiring an absence message.
Receiving side sends an IPMSG_SENDABSENCEINFO back if the status is absence mode.
If the status is not absence mode, a character string "Not absence mode" will be sent back.
发送IPMSG_GETABSENCEINFO命令来
获取离开信息,如果接收方是离开状态,则回发
IPMSG_SENDABSENCEINFO。
如果状态不是离开状态,字符串"
Not absence mode
"
将会被发送。
6) Confirmation/Retry
确认/重发
If a confirmation packet for IPMSG_SENDMSG or IPMSG_RECVMSG is not delivered
within a specified time, then it will be sent again.
A number of retry actions or interval period is depended on the current condition.
如果IPMSG_SENDMSG 或者 IPMSG_RECVMSG的确认包没有在指定时间内投递,它将会被重发。
重发行为或者间隔的时间段将依赖于当前的条件。
4. Other
其他
1) Linefeed
换行
Linefeed characters in Send Message is standardized with UNIX type ('0x0a').
Please change if needed.
在发送信息中的换行符是以Unix类型为标准的。如果需要可以改变。
2) Delimiter ':'
分隔符
':' is used as a delimiter. You can't use this delimiter for user name
and host name.
':'被用做分隔符。你不可以在用户名和主机名中使用这个分隔符。
If the use/host names contain a ':', please replace with another sign,
for an example ';'.
如果用户/主机中含有':',请使用其他符号替换,例如';'.
Although using this delimiter isn't problem as yet, I may create an
escape sequence.
尽管使用这个分隔符到目前为止还没有问题,但是我可能创建了一个逃避的序列。
3) Kanji codes
日文编写
SJIS
5. Contact e-mail address
联系邮箱地址
E-Mail [email]shirouzu@h.email.ne.jp[/email]
Note
注释
See ipmsg.h for command codes.
参见ipmsg.h中命令的代码。
Please e-mail me your comments and suggestions.
请把你的建议使用邮件发送给我。
- 飞鸽传书(IPMSG)协议(翻译稿)
- 飞鸽传书(IPMSG)协议(翻译稿)
- 飞鸽传书(IPMSG)协议(翻译稿)
- 飞鸽传书(IPMSG)协议(翻译稿)
- IPMSG(飞鸽传书)协议翻译
- IPMSG(飞鸽传书)协议翻译
- IPMSG(飞鸽传书)协议翻译
- IPMSG(飞鸽传书)协议翻译
- IPMSG(飞鸽传书)协议翻译
- IPMsg飞鸽传书网络协议
- IPMSG(飞鸽传书)协议翻译
- [转载]IPMSG(飞鸽传书)协议翻译
- [转载]IPMSG(飞鸽传书)协议翻译
- linux下基于ipmsg协议的飞鸽传书(一)
- IPMsg飞鸽传书网络协议解析手记
- IPMsg飞鸽传书网络协议解析手记
- IPMSG飞鸽传书3——协议翻译
- IPMsg飞鸽传书网络协议解析手记
- MyGUI中的内存泄漏
- JSP 内置对象
- C# 格式化日期,货币
- java execute、executeQuery和executeUpdate之间的区别
- 【第一次写博客!希望大家持续关注!这里会记录我们一起成长的道路】
- 飞鸽传书(IPMSG)协议(翻译稿)
- 博客开启日记
- 计算文本的高度并显示在label上出现灰色的线条
- opencv contrib怎么用
- oracle学习之bulk collect用法
- Android ExpandableListView单选以及多选实现
- 简单工厂(Simple Factory)模式
- java日常技巧
- 人格魅力养成