IRC协议-RFC1459中文翻译

翻译by:pako

email/gtalk:[email protected]

4.1 Connection Registration

下面这里所要描述到的命令是用来注册一个连接到irc服务器上,作为一名用户或者另一台server,当然也包括正确的断开连接。

“PASS”并非是client和server在注册时必须要求的,但它必须出现在server message和之后 NICK/USER命令之前。强烈推荐所有的服务器连接都拥有一个密码,这样可以提高实际连接时候的安全级别。下面是客户端推荐的注册命令执行顺序:

Pass message

Nick message

User message

4.1.1 Password message

Command: PASS

Parameters: <password>

PASS 命令是用来连接时设置一个连接密码的。密码必须在任何连接试图连接服务器之前设置好。当前要求的是客户端在发送 NICK/USER 命令前发送PASS,其他服务器连接在发送任何服务器指令前发送PASS命令。对于服务器的password必须符合包含在 c/n lines 里,客户端的必须在 I lines 里。你可以一次发送多个 PASS 命令在你注册前,但只有最后一个是有效的,并且一旦注册后就不能再被修改了。

Numeric Replies:

ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED

Example:

PASS secretpasswordhere

4.1.2 Nick message

Command: NICK

Parameters: <nickname> [ <hopcount> ]

NICK 命令是用来给予用户一个昵称或者修改之前的昵称。 <hopcount> 参数只是服务器用来标识这个昵称离服务器有多远。本地连接的 hopcount就是0.如果一个NICK 信息到达了一台已经存在一个这个昵称的服务器上,就会发生nickname冲突。发生nickname冲突后,所有是这个nickname的对象会被从服务器的数据库上移除,并且一个 KILL命令被发送到所有服务器上移除这个nickname。如果一个nickname更改出发了这个冲突,则已经存在的这个nickname也会被移除。

Numeric Replies:

ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME

ERR_NICKNAMEINUSE ERR_NICKCOLLISION

Example:

NICK Wiz                 ; Introducing new nick "Wiz".

:WiZ NICK Kilroy         ; WiZ changed his nickname to Kilroy.

4.1.3 User message

Command: USER

Parameters: <username> <hostname> <servername> <realname>

USER指令是在连接开始建立后来详细说明用户的username,hostname,servername,realname的。USER指令也被server之间用来通信用来通告一个新的用户连接上了服务器,只有当client的USER和NICK指令抵达服务器后才完成了注册连接的步骤。

服务器之间的USER指令必须以客户端的NICKname开头。一般情况下hostname和servername在服务器明确知道这是一个client发过来的USER指令的时候,他们都会被忽略,但他们在服务器和服务器之间通信会被使用到。这就意味着当一个新用户被通告到其他服务器时,一个NICK指令作为USER指令的附属也会被发送。

需要注意的是realname参数必须放在最后,因为它可能会含有空格字符,并且它必须以一个分号(:)开头。

Numeric Replies:

ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED

Examples:

USER guest tolmoon tolsun :Ronnie Reagan

                      ; User registering themselves with a

                      username of "guest" and real name

                      "Ronnie Reagan".

:testnick USER guest tolmoon tolsun :Ronnie Reagan

                      ; message between servers with the

                      nickname for which the USER command

                      belongs to

4.1.4 Server message                      

Command: SERVER

Parameters: <servername> <hopcount> <info>

server指令是用来告诉服务器连接上来的是另一台服务器。这条指令也可以用来通过网络传输数据。当一台新的服务器连接到irc服务器网络后,它的信息会被广播到整个网络上。<hopcount>是用来标识服务器之间距离的一种内部标识。对于真个服务器的列表,它有可能被阻止成一个属性结构的图谱,但是hostmasks可以防止这种情况的发生。

SERVER指令在一台服务器还会注册时去注册到一个服务器时被接受,或者已经注册在服务器上了,想要连接到其他已经注册在这台服务器上的服务器时。

Numeric Replies:

ERR_ALREADYREGISTRED

Example:

SERVER test.oulu.fi 1 :[tolsun.oulu.fi] Experimental server

                ; New server test.oulu.fi introducing

                itself and attempting to register.  The

                name in []'s is the hostname for the

                host running test.oulu.fi.

:tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Central Server

                ; Server tolsun.oulu.fi is our uplink

                for csd.bu.edu which is 5 hops away.

4.1.5 Oper

Command: OPER

Parameters: <user> <password>

OPER指令是提供给用户去获取管理员权限使用的。提交<user>和<password>参数去获取这种权限。

如果一个client发送一个带有正确的user和password的OPER指令,服务器就会通知网路上的其他管理员通过给nickname做“MODE +o操作”

OPER指令只能是client发送给服务器。

Numeric Replies:

ERR_NEEDMOREPARAMS RPL_YOUREOPER

ERR_NOOPERHOST ERR_PASSWDMISMATCH

Example:

OPER foo bar          ; Attempt to register as an operator

                      using a username of "foo" and "bar" as

                      the password.

4.1.6 Quit

Command: QUIT

Parameters: [<Quit message>]

一个客户端的会话可以通过一个quit指令来终结。服务器必须在收到client的QUIT指令后关闭这个client的连接。如果发送了QUIT指令,那么它的默认参数就是这个连接的nickname

如果要做网络分隔,那么你只需要吧两个服务器的名字一起同QUIT指令发送过去,服务器名之间通过空格隔开,那么服务器会自动断开第二个服务器名的连接,而保持第一个服务器名的连接。

如果客户端不是因为自己死亡或者发生了socket的EOF异常,那么客户端需要发送断开的理由同QIUT指令一起发往服务器。

Numeric Replies:

None.

Examples:

QUIT :Gone to have lunch     ; Preferred message format.

4.1.7 Server quit message

Command: SQUIT

Parameters: <server> <comment>

SQUIT是同来通告服务器的退出和死亡的。如果一台服务器想同另另一台服务器断开连接那么它必须发送一条SQUIT指令给那台服务器,参数名就是那台服务器的名字,然后收到SQUIT命令的服务器就会断开同它的连接。

这条指令也会别管理员同来帮助管理整个IRC服务网络的次序。管理员也会发布一条SQUIT指令给一台远程服务器。

在管理员执行了对远程服务器squit后需要填写<comment>信息,这样别的管理员就会知道这个事情发生的原因了。<comment>也可以填写一些错误或者简单的信息进去。

收到SQUIT指令的服务器应该也同时发送SQUIT信息到连接在这台服务器上的服务器告诉他们发生了什么。

同样的,也要发送一个QUIT指令到网络上其他的服务器上的客户端告诉他们这个信息。同理,当一个channel由于分隔丢失了一位成员,那么他们也应该被发送一条QUIT指令。

Numeric replies:

ERR_NOPRIVILEGES ERR_NOSUCHSERVER

Example:

SQUIT tolsun.oulu.fi :Bad Link ?

                ; the server link tolson.oulu.fi has

                been terminated because of "Bad Link".

:Trillian SQUIT cm22.eng.umd.edu :Server out of control

                ; message from Trillian to disconnect

                "cm22.eng.umd.edu" from the net

                because "Server out of control".

4.2 Channel operations 频道操作

这一组的指令牵涉到频道的操作,他们的参数(channelmodes),和他们的内容(不如用户)。在做这些操作是,网络另一段的client发送指令时不可避免的会发生一些冲突。

4.2.1 Join message

Command: JOIN

Parameters: <channel>{,<channel>} [<key>{,<key>}]

JOIN指令是用户用来收听一个指定的频道时使用的。只有这个client连接的服务器才能判断是否这个client可否加入一个频道,服务器收到别的服务器的指令后自动添加这个client到频道里。这种情况会在如下的条件下发生:

1)这个用户是被邀请近一个 invite-only的频道

2)这个用户的 nick/username/hostname 不能满足任何一条禁止的条件

3)如果这是了correct key(password),那么它必须正确。

这回在MODE指令里面讲的更加详细。见4.2.3.

一旦用户加入了一个频道,他会收到这个服务器能够对这个频道起作用的所有命令。这其中包括,MODE,KICK,PART,QUIT,当还有PRIVMSG/NOTICE.JOIN指需要被广告到其他服务器上,这样其他服务器就会知道在哪个频道里可以找到这个用户。这就可以实现方便的发送PRIVMAS/NOTICE指令到channel的方式了。

如果JOIN指令成功后,那么用户会收到这个频道所有的主题(使用RPL_TOPIC)和这个频道里所有用户的列表。

Numeric Replies:

ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN

ERR_INVITEONLYCHAN ERR_BADCHANNELKEY

ERR_CHANNELISFULL ERR_BADCHANMASK

ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS

RPL_TOPIC

Examples:

JOIN #foobar                ; join channel #foobar.

JOIN &foo fubar             ; join channel &foo using key "fubar".

JOIN #foo,&bar fubar        ; join channel #foo using key "fubar"

                            and &bar using no key.

JOIN #foo,#bar fubar,foobar ; join channel #foo using key "fubar".

                            and channel #bar using key "foobar".

JOIN #foo,#bar              ; join channels #foo and #bar.

:WiZ JOIN #Twilight_zone    ; JOIN message from WiZ

4.2.2 Part message

Command: PART

Parameters: <channel>{,<channel>}

PART指令是client用来退出一个或者几个频道时使用的。

Numeric Replies:

ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL

ERR_NOTONCHANNEL

Examples:

PART #twilight_zone    ; leave channel "#twilight_zone"

PART #oz-ops,&group5   ; leave both channels "&group5" and

                       "#oz-ops".

4.2.3 Mode message

Command: MODE

MODE是IRC中非常重要的指令。它可以修改username和channel的模式。相似的地方是如果一个操作可以让一个用户被删除,那么这个操作对频道也是一个意思。对于组织MODE 指令时,建议先自己解析一下它的意思然后再发送4.2.3.1 Channel modes

4.2.3.1 Channel modes

Parameters: <channel> {[+|-]|o|p|s|i|t|n|b|v} [<limit>] [<user>] [<ban mask>]

MODE指令提供给频道管理员来修改它们channel的特征。这必须要求服务器能够修改channel的mode,因为这样频道管理员才能被创建。

channel mode的用法如下:

o

- give/take channel operator privileges;

- 给频道管理员权限

p

- private channel flag;

- 私人频道标志

s

- secret channel flag;

- 秘密频道标志

i

- invite-only channel flag;

- 仅邀请才能进入的标志

t

- topic settable by channel operator only flag;

- 只有管理员才能设置主题的频道标志

n

- no messages to channel from clients on the outside;

- 外部client不能发送消息到频道的标志

m

- moderated channel;

- 一般的频道

l

- set the user limit to channel;

- 设置频道黑名单用户

b

- set a ban mask to keep users out;

- 设置一个ban mask来禁止用户进入

v

- give/take the ability to speak on a moderated channel;

- 给予能在 moderate 频道说话的权利

k

- set a channel key (password).   

- 设置一个频道密码

4.2.3.2 User modes

Parameters: <nickname> {[+|-]|i|w|s|o}

用户的MODE的改变会影响是否它能被其他人看到,或者是否额外的信息能被发送给他。只有发送者和他发送的nickname参数一样时,MODE指令才会被接受。

mode的内容如下:

i

- marks a users as invisible;

- 标识一个用户不可见

s

- marks a user for receipt of server notices;

- 标识一个用户可以接受服务器的notices

w

- user receives wallops;

o

- operator flag 

- 管理员标志

如果一个用户视图给自己增加“+o”标志,可能会被拒绝。但是如果一个用户给自己做“-o”操作则不会有任何限制。  

Numeric Replies:

ERR_NEEDMOREPARAMS RPL_CHANNELMODEIS

ERR_CHANOPRIVSNEEDED ERR_NOSUCHNICK

ERR_NOTONCHANNEL ERR_KEYSET

RPL_BANLIST RPL_ENDOFBANLIST

ERR_UNKNOWNMODE ERR_NOSUCHCHANNEL

ERR_USERSDONTMATCH RPL_UMODEIS

ERR_UMODEUNKNOWNFLAG

Examples:

Use of Channel Modes:

MODE #Finnish +im        ; Makes #Finnish channel moderated and

                         'invite-only'.

MODE #Finnish +o Kilroy  ; Gives 'chanop' privileges to Kilroy on

                         channel #Finnish.

MODE #Finnish +v Wiz     ; Allow WiZ to speak on #Finnish.

MODE #Fins -s            ; Removes 'secret' flag from channel

                         #Fins.

MODE #42 +k oulu         ; Set the channel key to "oulu".

MODE #eu-opers +l 10     ; Set the limit for the number of users

                         on channel to 10.

MODE &oulu +b            ; list ban masks set for channel.

MODE &oulu +b *!*@*      ; prevent all users from joining.

MODE &oulu +b *!*@*.edu  ; prevent any user from a hostname

                         matching *.edu from joining.

Use of user Modes:

:MODE WiZ -w             ; turns reception of WALLOPS messages

                         off for WiZ.

:Angel MODE Angel +i     ; Message from Angel to make themselves

                         invisible.

MODE WiZ -o              ; WiZ 'deopping' (removing operator

                         status).  The plain reverse of this

                         command ("MODE WiZ +o") must not be

                         allowed from users since would bypass

                         the OPER command.

4.2.4 Topic message

Command: TOPIC

Parameters: <channel> [<topic>]

TOPIC指令是用来查看或者修改一个频道的主题的。如果没有<topic>那么这个频道的主题就会被返回。如果存在<topic>参数,如果频道权限允许,那么这个主题可以被修改。

Numeric Replies:

ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL

RPL_NOTOPIC RPL_TOPIC

ERR_CHANOPRIVSNEEDED

Examples:

:Wiz TOPIC #test :New topic ;User Wiz setting the topic.

TOPIC #test :another topic  ;set the topic on #test to "another

                            topic".

TOPIC #test                 ; check the topic for #test.

4.2.5 Names message

Command: NAMES

Parameters: [<channel>{,<channel>}]

使用NAMES指令,一个用户可以列出一个频道里所有他们可见的nickname。他们只能查看哪些非+p标志和+s标志,或者他么已经进入的频道。<channel>参数指定的就是他们想要查看的频道名。不会因为一个错误频道名而返回错误信息。

如果没有<channel>参数被提供,那么会返回一个所有频道名和他们占有人的列表。

Numerics:

RPL_NAMREPLY RPL_ENDOFNAMES

Examples:

NAMES #twilight_zone,#42   ; list visible users on #twilight_zone

                           and #42 if the channels are visible to

                           you.

NAMES                      ; list all visible channels and users

4.2.6 List message

Command: LIST

Parameters: [<channel>{,<channel>} [<server>]]

List指令是用来列出频道和他们的主题。如果<channel>参数被使用,那么只有频道的状态会被展示。私人频道只会列出一个 “Prv”标志会不会显示他们的主题除非提交这个请求的用户在这个频道里。同样的对与秘密频道也不会列出除非用户在那个频道里。

Numeric Replies:

ERR_NOSUCHSERVER RPL_LISTSTART

RPL_LIST RPL_LISTEND

Examples:

LIST                     ; List all channels.

LIST #twilight_zone,#42  ; List channels #twilight_zone and #42

4.2.7 Invite message

Command: INVITE

Parameters: <nickname> <channel>

INVITE指令是用来邀请一个用户加入一个频道的。<nickname>参数就是被邀请人,<channel>就是被邀请进入的频道。邀请一个用户进入一个MODE +i(仅邀请频道)的频道,邀请人必须是频道的管理员。

Numeric Replies:

ERR_NEEDMOREPARAMS ERR_NOSUCHNICK

ERR_NOTONCHANNEL ERR_USERONCHANNEL

ERR_CHANOPRIVSNEEDED

RPL_INVITING RPL_AWAY

Examples:

:Angel INVITE Wiz #Dust    ; User Angel inviting WiZ to channel

                           #Dust

INVITE Wiz #Twilight_Zone  ; Command to invite WiZ to

                           #Twilight_zone

4.2.8 Kick command

Command: KICK

Parameters: <channel> <user> [<comment>]

KICK指令可以用来强制的提出一个用户出一个频道。只有频道管理员可以踢用户。所有服务器受到KICK指令后需要验证它的正确性(比如是否发送人是这个频道的管理员)才能去执行。                    

Numeric Replies:

ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL

ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED

ERR_NOTONCHANNEL

Examples:

KICK &Melbourne Matthew    ; Kick Matthew from &Melbourne

KICK #Finnish John :Speaking English

                           ; Kick John from #Finnish using

                           "Speaking English" as the reason

                           (comment).

:WiZ KICK #Finnish John    ; KICK message from WiZ to remove John

                           from channel #Finnish

NOTE:

It is possible to extend the KICK command parameters to the following:

<channel>{,<channel>} <user>{,<user>} [<comment>]

未完。。

猜你喜欢

转载自pako.iteye.com/blog/1125561
今日推荐