翻译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):网络通信与交互技术 #### 一、引言 互联网中继聊天(Internet Relay Chat,简称IRC)是一种基于文本的即时通讯系统,允许用户通过TCP/IP连接到服务器上进行实时对话。自从1988年首次推出...
除了基本的客户端和服务器,XMPP架构还包括网关,用于在XMPP和其他非XMPP协议(如电子邮件、IRC、SIMPLE、SMS、AIM、ICQ、MSN Messenger、Yahoo! Instant Messenger等)之间进行翻译。尽管网关的功能描述在RFC 3920...
5. **协议兼容性**:irc3库遵循IRC协议,支持最新的RFC 2812,并兼容许多服务器和客户端的扩展。 6. **配置文件**:irc3可以通过配置文件轻松设置服务器连接参数、身份验证信息、以及启用的插件等。 7. **丰富的...
6. **RFC1459.HLP**:RFC1459是IRC协议的官方文档,它详细阐述了IRC的协议规范和操作流程。初学者应该仔细阅读这个文档,以深入理解IRC的工作方式。 7. **ircpre2.log**:这可能是程序运行时的日志文件,记录了程序...
RFC 1459和RFC 2812是新IRC软件作者想要实现IRC时首先要注意的地方。 他们为什么不这样做呢?这些是最新的RFC! 但是,自从这些规范发布以来,IRC发生了很大变化。 如今,您需要查看许多不同的文档,以全面了解该...
整个XMPP架构中,还包含网关服务,其功能是实现XMPP协议与其他非XMPP消息系统的互操作性,如电子邮件、IRC、SMS等。 客户端是用户直接使用的软件,负责通过XMPP与服务器或其他客户端进行交互。客户端可以同时登录并...
- rfc2812.txt:RFC2812是IRC协议的一个版本规范,包含了关于如何正确实现IRC客户端和服务器的详细信息。 - lagbeast.vssscc:这是一个版本控制系统(可能是Visual SourceSafe)的项目文件,记录了文件的版本控制...
**协议规范**:"rfc2812.txt"可能包含了IRC协议的RFC(Request for Comments)文档,这是IRC协议的标准定义。开发者在实现IRC客户端时需要遵循这些规范来确保正确地处理连接、消息传递等操作。 **命令指南**:...
RFC是互联网工程任务组(IETF)发布的一系列技术文档,定义了IRC协议的各种操作和格式,如命令、响应和数据结构。 Sonata IRC Network的实现基于J2EE(Java 2 Platform, Enterprise Edition)架构,这是一种用于...
2. **RFC1459支持**:IRClib遵循RFC1459标准,这是IRC协议的核心规范,确保了与大多数IRC服务器的互操作性。开发者可以利用这个库连接到全球的IRC网络,并与其他用户进行交流。 3. **SSL连接**:除了基本的TCP连接...
### RFC3920(XMPP)中文翻译版——核心知识点解析 #### 一、概述与背景 **RFC3920**定义了**可扩展的消息和出席信息协议(XMPP)**的核心功能,该协议利用XML流实现任意两个网络终端间的接近实时交换结构化信息。...
8. **RFC1459** - "Internet Relay Chat (IRC): Protocol":定义了互联网中聊天室服务(IRC)的协议。 9. **RFC1500** - "The TCP/IP Guide to Network Software":可能是一个关于开发TCP/IP网络软件的指南。 这些...
7. **RFC1459.HLP**:RFC1459是IRC协议的官方文档,它是一个帮助文件,详细描述了IRC协议的规范和操作,供开发者参考。 8. **IRCPRE2.TXT**:这是一个文本文件,可能包含了程序的使用说明、开发者注释或者版本历史...
用Delphi编写的Win-32 IRC服务器。 该项目的目标是使它在完整的RFC xxxx协议下运行。 目前,其计划作为“安全IRC”应为Chatters提供“最大的隐私”。 UserMode WHOIS,DNS不正确
7. RFC1459.HLP:RFC1459是IRC协议的标准文档,此.HLP文件可能是一个帮助文件,详细解释了IRC的规则和命令。 8. IRCPRE2.TXT:可能包含程序的使用说明、开发者注释或者更详细的文档。 9. IRCPRE2.VBP:这是VB工程...
现代IRC文件该站点包含描述IRC协议和相关技术的文档。 此处托管的文档旨在对使用IRC的软件开发人员有用。 文档文件文档有关创建/维护其他文档的建议,请或! 这些文档中描述的行为和常量应该收敛,和/或可以与大多数...
- **网关**:作为服务器端的特殊服务,网关负责将XMPP协议与外部消息系统的协议进行互译,实现跨协议的通信,如电子邮件、IRC、SIMPLE等。 #### 网络通信 XMPP网络由相互通信的服务器构成,服务器通过网络地址标识...
它旨在提供RFC 1459和2812中描述的协议的完整,有效的实现,以及该协议的事实上的现代功能。 该项目以前托管在。 非RFC功能 解析。 参数的解释留给用户。 支持。 支持最常用的命令。 帮助 在我们的IRC频道...
exirc, 用于Elixir项目的IRC客户端适配器 ExIrc ExIrc是Elixir项目的IRC客户端库。 它的目标是有一个清晰。文档化的API,使你能够有效地与... 它的目标是实现完整的RFC2812协议,以及RFC1459的相关部分。正在启动在 m
预期将来的IRCv3规范将IRCv3-harmony作为基础而不是RFC1459。 IRCv3和声会是什么? IRCv3-harmony包含IRC堆栈的核心原语,并且设计为以比IRCv3工作组轨道慢的速度移动。 这包括: 核心IRCv3协议原语: 能力协商...