`

IRC协议-RFC1459中文翻译

 
阅读更多

 

翻译by:pako

email/gtalk:zealzpc@gmail.com

 

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>]

 

未完。。

分享到:
评论

相关推荐

    IRC协议(rfc1459)

    ### IRC协议(rfc1459):网络通信与交互技术 #### 一、引言 互联网中继聊天(Internet Relay Chat,简称IRC)是一种基于文本的即时通讯系统,允许用户通过TCP/IP连接到服务器上进行实时对话。自从1988年首次推出...

    XMPP协议学习-RFC 3920

    除了基本的客户端和服务器,XMPP架构还包括网关,用于在XMPP和其他非XMPP协议(如电子邮件、IRC、SIMPLE、SMS、AIM、ICQ、MSN Messenger、Yahoo! Instant Messenger等)之间进行翻译。尽管网关的功能描述在RFC 3920...

    Python库 | irc3-0.8.3-py2-none-any.whl

    5. **协议兼容性**:irc3库遵循IRC协议,支持最新的RFC 2812,并兼容许多服务器和客户端的扩展。 6. **配置文件**:irc3可以通过配置文件轻松设置服务器连接参数、身份验证信息、以及启用的插件等。 7. **丰富的...

    irc-code.rar_irc

    6. **RFC1459.HLP**:RFC1459是IRC协议的官方文档,它详细阐述了IRC的协议规范和操作流程。初学者应该仔细阅读这个文档,以深入理解IRC的工作方式。 7. **ircpre2.log**:这可能是程序运行时的日志文件,记录了程序...

    irc-rfcs:IRC的新RFC!

    RFC 1459和RFC 2812是新IRC软件作者想要实现IRC时首先要注意的地方。 他们为什么不这样做呢?这些是最新的RFC! 但是,自从这些规范发布以来,IRC发生了很大变化。 如今,您需要查看许多不同的文档,以全面了解该...

    RFC3920中文翻译版.pdf

    整个XMPP架构中,还包含网关服务,其功能是实现XMPP协议与其他非XMPP消息系统的互操作性,如电子邮件、IRC、SMS等。 客户端是用户直接使用的软件,负责通过XMPP与服务器或其他客户端进行交互。客户端可以同时登录并...

    Lagbeast IRC Bot-开源

    - rfc2812.txt:RFC2812是IRC协议的一个版本规范,包含了关于如何正确实现IRC客户端和服务器的详细信息。 - lagbeast.vssscc:这是一个版本控制系统(可能是Visual SourceSafe)的项目文件,记录了文件的版本控制...

    Neantertal's Open IRC Client-开源

    **协议规范**:"rfc2812.txt"可能包含了IRC协议的RFC(Request for Comments)文档,这是IRC协议的标准定义。开发者在实现IRC客户端时需要遵循这些规范来确保正确地处理连接、消息传递等操作。 **命令指南**:...

    Sonata IRC Network-开源

    RFC是互联网工程任务组(IETF)发布的一系列技术文档,定义了IRC协议的各种操作和格式,如命令、响应和数据结构。 Sonata IRC Network的实现基于J2EE(Java 2 Platform, Enterprise Edition)架构,这是一种用于...

    IRClib IRC library-开源

    2. **RFC1459支持**:IRClib遵循RFC1459标准,这是IRC协议的核心规范,确保了与大多数IRC服务器的互操作性。开发者可以利用这个库连接到全球的IRC网络,并与其他用户进行交流。 3. **SSL连接**:除了基本的TCP连接...

    RFC3920(XMPP)中文翻译版

    ### RFC3920(XMPP)中文翻译版——核心知识点解析 #### 一、概述与背景 **RFC3920**定义了**可扩展的消息和出席信息协议(XMPP)**的核心功能,该协议利用XML流实现任意两个网络终端间的接近实时交换结构化信息。...

    RFC文档1001-1500

    8. **RFC1459** - "Internet Relay Chat (IRC): Protocol":定义了互联网中聊天室服务(IRC)的协议。 9. **RFC1500** - "The TCP/IP Guide to Network Software":可能是一个关于开发TCP/IP网络软件的指南。 这些...

    irc客户端程序 (80KB)

    7. **RFC1459.HLP**:RFC1459是IRC协议的官方文档,它是一个帮助文件,详细描述了IRC协议的规范和操作,供开发者参考。 8. **IRCPRE2.TXT**:这是一个文本文件,可能包含了程序的使用说明、开发者注释或者版本历史...

    FETT IRC Server-开源

    用Delphi编写的Win-32 IRC服务器。 该项目的目标是使它在完整的RFC xxxx协议下运行。 目前,其计划作为“安全IRC”应为Chatters提供“最大的隐私”。 UserMode WHOIS,DNS不正确

    irc客户端程序 (80KB)...

    7. RFC1459.HLP:RFC1459是IRC协议的标准文档,此.HLP文件可能是一个帮助文件,详细解释了IRC的规则和命令。 8. IRCPRE2.TXT:可能包含程序的使用说明、开发者注释或者更详细的文档。 9. IRCPRE2.VBP:这是VB工程...

    modern-irc:有用的概述和对今天实现的IRC客户端协议的引用

    现代IRC文件该站点包含描述IRC协议和相关技术的文档。 此处托管的文档旨在对使用IRC的软件开发人员有用。 文档文件文档有关创建/维护其他文档的建议,请或! 这些文档中描述的行为和常量应该收敛,和/或可以与大多数...

    RFC3920可扩展消息出席协议

    - **网关**:作为服务器端的特殊服务,网关负责将XMPP协议与外部消息系统的协议进行互译,实现跨协议的通信,如电子邮件、IRC、SIMPLE等。 #### 网络通信 XMPP网络由相互通信的服务器构成,服务器通过网络地址标识...

    IrcDotNet:IRC.NET是用于.NET的完整IRC(Internet中继聊天)客户端库

    它旨在提供RFC 1459和2812中描述的协议的完整,有效的实现,以及该协议的事实上的现代功能。 该项目以前托管在。 非RFC功能 解析。 参数的解释留给用户。 支持。 支持最常用的命令。 帮助 在我们的IRC频道...

    exirc, 用于Elixir项目的IRC客户端适配器.zip

    exirc, 用于Elixir项目的IRC客户端适配器 ExIrc ExIrc是Elixir项目的IRC客户端库。 它的目标是有一个清晰。文档化的API,使你能够有效地与... 它的目标是实现完整的RFC2812协议,以及RFC1459的相关部分。正在启动在 m

    ircv3-harmony:IRCv3核心协议提案的ID草案(与IETF协调)

    预期将来的IRCv3规范将IRCv3-harmony作为基础而不是RFC1459。 IRCv3和声会是什么? IRCv3-harmony包含IRC堆栈的核心原语,并且设计为以比IRCv3工作组轨道慢的速度移动。 这包括: 核心IRCv3协议原语: 能力协商...

Global site tag (gtag.js) - Google Analytics