翻译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协议
RFC 1459和RFC 2812是新IRC软件作者想要实现IRC时首先要注意的地方。 他们为什么不这样做呢?这些是最新的RFC! 但是,自从这些规范发布以来,IRC发生了很大变化。 如今,您需要查看许多不同的文档,以全面了解该...
用Delphi编写的Win-32 IRC服务器。 该项目的目标是使它在完整的RFC xxxx协议下运行。 目前,其计划作为“安全IRC”应为Chatters提供“最大的隐私”。 UserMode WHOIS,DNS不正确
现代IRC文件该站点包含描述IRC协议和相关技术的文档。 此处托管的文档旨在对使用IRC的软件开发人员有用。 文档文件文档有关创建/维护其他文档的建议,请或! 这些文档中描述的行为和常量应该收敛,和/或可以与大多数...
它旨在提供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协议原语: 能力协商...
与任何RFC 1459兼容客户端一起使用 可以在配置中更改密码,并且HUP将重新加载密码。 IRC服务器和网络的网关模式(请参见下文) 兼容性 工作于: 自由节点 里宗 DALnet 电信技术委员会 EFnet 任何符合RFC1459的...
凯西 这是什么? 这是用Swift编写的IRC客户端。 为什么? 所有在那里的人都有一种烦恼或另一种...RFC 1459: : RFC 2812: https : //tools.ietf.org/html/rfc2812 IRC数值回应: https : //www.alien.net.au/ir
模块化和可扩展:RFC1459之上的功能被实现为单独的模块,供用户选择和编写自己的模块。 广泛的功能被编写为尽可能地可扩展。 自由许可:3子BSD许可确保您可以在任何地方使用它。 基本用法 pip install pydle 从...
IrcSocket是IRC协议(RFC 2812)的C ++实现。 它使用libsigc ++进行事件驱动的设计
IRK是用于IRC(Internet中继聊天)编程的Tcl客户端库。 其目的是为用Tcl编写的IRC客户端(例如,聊天客户端,机器人,服务)提供基础。 IRK负责IRC(RFC1459)协议的细节,允许
符合 IRC RFC 1459、2810、2811、2812 和 2813。 体积小、速度快且非常轻。 可定制和可扩展的插件(C、Perl、Python、Ruby、Lua、Tcl、Guile)。 完整记录并翻译成多种语言。 从头开发。 免费软件,在 GPLv3 ...
一个简单的基于C编写的基于rfc 1459(irc协议)的irc客户端。该客户端具有一个irc api,它被创建为尽可能简单,主要是出于可教育的原因。
SmartIRC是用于与IRC网络通信PHP类/库,符合RFC 2812(IRC)。 它是处理所有IRC协议消息的API。 项目已移至PEAR! http://pear.php.net/package/Net_SmartIRC/