rfc2812.txt
来自「RFC 的详细文档!」· 文本 代码 · 共 1,748 行 · 第 1/5 页
TXT
1,748 行
is not allowed within messages.
Most protocol messages specify additional semantics and syntax for
the extracted parameter strings dictated by their position in the
list. For example, many server commands will assume that the first
parameter after the command is the list of targets, which can be
described with:
target = nickname / server
msgtarget = msgto *( "," msgto )
msgto = channel / ( user [ "%" host ] "@" servername )
msgto =/ ( user "%" host ) / targetmask
msgto =/ nickname / ( nickname "!" user "@" host )
channel = ( "#" / "+" / ( "!" channelid ) / "&" ) chanstring
[ ":" chanstring ]
servername = hostname
host = hostname / hostaddr
hostname = shortname *( "." shortname )
shortname = ( letter / digit ) *( letter / digit / "-" )
*( letter / digit )
; as specified in RFC 1123 [HNAME]
hostaddr = ip4addr / ip6addr
ip4addr = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit
ip6addr = 1*hexdigit 7( ":" 1*hexdigit )
ip6addr =/ "0:0:0:0:0:" ( "0" / "FFFF" ) ":" ip4addr
nickname = ( letter / special ) *8( letter / digit / special / "-" )
targetmask = ( "$" / "#" ) mask
; see details on allowed masks in section 3.3.1
chanstring = %x01-07 / %x08-09 / %x0B-0C / %x0E-1F / %x21-2B
chanstring =/ %x2D-39 / %x3B-FF
; any octet except NUL, BELL, CR, LF, " ", "," and ":"
channelid = 5( %x41-5A / digit ) ; 5( A-Z / 0-9 )
Kalt Informational [Page 7]
RFC 2812 Internet Relay Chat: Client Protocol April 2000
Other parameter syntaxes are:
user = 1*( %x01-09 / %x0B-0C / %x0E-1F / %x21-3F / %x41-FF )
; any octet except NUL, CR, LF, " " and "@"
key = 1*23( %x01-05 / %x07-08 / %x0C / %x0E-1F / %x21-7F )
; any 7-bit US_ASCII character,
; except NUL, CR, LF, FF, h/v TABs, and " "
letter = %x41-5A / %x61-7A ; A-Z / a-z
digit = %x30-39 ; 0-9
hexdigit = digit / "A" / "B" / "C" / "D" / "E" / "F"
special = %x5B-60 / %x7B-7D
; "[", "]", "\", "`", "_", "^", "{", "|", "}"
NOTES:
1) The <hostaddr> syntax is given here for the sole purpose of
indicating the format to follow for IP addresses. This
reflects the fact that the only available implementations of
this protocol uses TCP/IP as underlying network protocol but is
not meant to prevent other protocols to be used.
2) <hostname> has a maximum length of 63 characters. This is a
limitation of the protocol as internet hostnames (in
particular) can be longer. Such restriction is necessary
because IRC messages are limited to 512 characters in length.
Clients connecting from a host which name is longer than 63
characters are registered using the host (numeric) address
instead of the host name.
3) Some parameters used in the following sections of this
documents are not defined here as there is nothing specific
about them besides the name that is used for convenience.
These parameters follow the general syntax defined for
<params>.
2.4 Numeric replies
Most of the messages sent to the server generate a reply of some
sort. The most common reply is the numeric reply, used for both
errors and normal replies. The numeric reply MUST be sent as one
message consisting of the sender prefix, the three-digit numeric, and
the target of the reply. A numeric reply is not allowed to originate
from a client. In all other respects, a numeric reply is just like a
normal message, except that the keyword is made up of 3 numeric
digits rather than a string of letters. A list of different replies
is supplied in section 5 (Replies).
Kalt Informational [Page 8]
RFC 2812 Internet Relay Chat: Client Protocol April 2000
2.5 Wildcard expressions
When wildcards are allowed in a string, it is referred as a "mask".
For string matching purposes, the protocol allows the use of two
special characters: '?' (%x3F) to match one and only one character,
and '*' (%x2A) to match any number of any characters. These two
characters can be escaped using the character '\' (%x5C).
The Augmented BNF syntax for this is:
mask = *( nowild / noesc wildone / noesc wildmany )
wildone = %x3F
wildmany = %x2A
nowild = %x01-29 / %x2B-3E / %x40-FF
; any octet except NUL, "*", "?"
noesc = %x01-5B / %x5D-FF
; any octet except NUL and "\"
matchone = %x01-FF
; matches wildone
matchmany = *matchone
; matches wildmany
Examples:
a?c ; Matches any string of 3 characters in length starting
with "a" and ending with "c"
a*c ; Matches any string of at least 2 characters in length
starting with "a" and ending with "c"
3. Message Details
On the following pages there are descriptions of each message
recognized by the IRC server and client. All commands described in
this section MUST be implemented by any server for this protocol.
Where the reply ERR_NOSUCHSERVER is returned, it means that the
target of the message could not be found. The server MUST NOT send
any other replies after this error for that command.
The server to which a client is connected is required to parse the
complete message, and return any appropriate errors.
If multiple parameters is presented, then each MUST be checked for
validity and appropriate responses MUST be sent back to the client.
In the case of incorrect messages which use parameter lists with
comma as an item separator, a reply MUST be sent for each item.
Kalt Informational [Page 9]
RFC 2812 Internet Relay Chat: Client Protocol April 2000
3.1 Connection Registration
The commands described here are used to register a connection with an
IRC server as a user as well as to correctly disconnect.
A "PASS" command is not required for a client connection to be
registered, but it MUST precede the latter of the NICK/USER
combination (for a user connection) or the SERVICE command (for a
service connection). The RECOMMENDED order for a client to register
is as follows:
1. Pass message
2. Nick message 2. Service message
3. User message
Upon success, the client will receive an RPL_WELCOME (for users) or
RPL_YOURESERVICE (for services) message indicating that the
connection is now registered and known the to the entire IRC network.
The reply message MUST contain the full client identifier upon which
it was registered.
3.1.1 Password message
Command: PASS
Parameters: <password>
The PASS command is used to set a 'connection password'. The
optional password can and MUST be set before any attempt to register
the connection is made. Currently this requires that user send a
PASS command before sending the NICK/USER combination.
Numeric Replies:
ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
Example:
PASS secretpasswordhere
3.1.2 Nick message
Command: NICK
Parameters: <nickname>
NICK command is used to give user a nickname or change the existing
one.
Kalt Informational [Page 10]
RFC 2812 Internet Relay Chat: Client Protocol April 2000
Numeric Replies:
ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME
ERR_NICKNAMEINUSE ERR_NICKCOLLISION
ERR_UNAVAILRESOURCE ERR_RESTRICTED
Examples:
NICK Wiz ; Introducing new nick "Wiz" if session is
still unregistered, or user changing his
nickname to "Wiz"
:WiZ!jto@tolsun.oulu.fi NICK Kilroy
; Server telling that WiZ changed his
nickname to Kilroy.
3.1.3 User message
Command: USER
Parameters: <user> <mode> <unused> <realname>
The USER command is used at the beginning of connection to specify
the username, hostname and realname of a new user.
The <mode> parameter should be a numeric, and can be used to
automatically set user modes when registering with the server. This
parameter is a bitmask, with only 2 bits having any signification: if
the bit 2 is set, the user mode 'w' will be set and if the bit 3 is
set, the user mode 'i' will be set. (See Section 3.1.5 "User
Modes").
The <realname> may contain space characters.
Numeric Replies:
ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
Example:
USER guest 0 * :Ronnie Reagan ; User registering themselves with a
username of "guest" and real name
"Ronnie Reagan".
USER guest 8 * :Ronnie Reagan ; User registering themselves with a
username of "guest" and real name
"Ronnie Reagan", and asking to be set
invisible.
Kalt Informational [Page 11]
RFC 2812 Internet Relay Chat: Client Protocol April 2000
3.1.4 Oper message
Command: OPER
Parameters: <name> <password>
A normal user uses the OPER command to obtain operator privileges.
The combination of <name> and <password> are REQUIRED to gain
Operator privileges. Upon success, the user will receive a MODE
message (see section 3.1.5) indicating the new user modes.
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.
3.1.5 User mode message
Command: MODE
Parameters: <nickname>
*( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) )
The user MODE's are typically changes which affect either how the
client is seen by others or what 'extra' messages the client is sent.
A user MODE command MUST only be accepted if both the sender of the
message and the nickname given as a parameter are both the same. If
no other parameter is given, then the server will return the current
settings for the nick.
The available modes are as follows:
a - user is flagged as away;
i - marks a users as invisible;
w - user receives wallops;
r - restricted user connection;
o - operator flag;
O - local operator flag;
s - marks a user for receipt of server notices.
Additional modes may be available later on.
Kalt Informational [Page 12]
RFC 2812 Internet Relay Chat: Client Protocol April 2000
The flag 'a' SHALL NOT be toggled by the user using the MODE command,
instead use of the AWAY command is REQUIRED.
If a user attempts to make themselves an operator using the "+o" or
"+O" flag, the attempt SHOULD be ignored as users could bypass the
authentication mechanisms of the OPER command. There is no
restriction, however, on anyone `deopping' themselves (using "-o" or
"-O").
On the other hand, if a user attempts to make themselves unrestricted
using the "-r" flag, the attempt SHOULD be ignored. There is no
restriction, however, on anyone `deopping' themselves (using "+r").
This flag is typically set by the server upon connection for
administrative reasons. While the restrictions imposed are left up
to the implementation, it is typical that a restricted user not be
allowed to change nicknames, nor make use of the channel operator
status on channels.
The flag 's' is obsolete but MAY still be used.
Numeric Replies:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?