飞鸽传书(IPMSG)协议(翻译稿)

 协议声明:

                                             本协议是由日本人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.

    请把你的建议使用邮件发送给我。

原文地址:https://www.cnblogs.com/hnrainll/p/2039567.html