Initial commit
This commit is contained in:
13
README.md
Normal file
13
README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# SuperNets Wiki
|
||||
|
||||
Lore, shenanigans, memes, and lulz from the [SuperNets](irc://irc.supernets.org) IRC network.
|
||||
|
||||
π **Read the wiki:** https://git.supernets.org/supernets/wiki/wiki
|
||||
|
||||
---
|
||||
|
||||
### Contribute
|
||||
|
||||
Got SuperNets lore, memes, or tales of degeneracy to share? Open an [issue](https://git.supernets.org/supernets/wiki/issues) or submit a [pull request](https://git.supernets.org/supernets/wiki/pulls).
|
||||
|
||||
All contributions welcome β the more unhinged, the better.
|
||||
41
wiki/BAN-POLICY.md
Normal file
41
wiki/BAN-POLICY.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Ban Policy
|
||||
|
||||
## Channel Bans
|
||||
|
||||
Bans made in a channel are controlled only by the channels operators. If you have been banned from a channel and would like to be un-banned, you will have to contact one of the channels operators via private message.
|
||||
|
||||
**The network operators do not interfere with channel bans.**
|
||||
|
||||
## Network Bans
|
||||
|
||||
Bans made on a network-wide level are only ever really done to mitigate spam.
|
||||
|
||||
The network uses a DNSBL system in an effort to mitigate spam from known blacklisted hosts. We use the [DroneBL](https://www.dronebl.org/), [EFNetRBL](https://rbl.efnetrbl.org/), & [TorBL](https://www.dan.me.uk/dnsbl) lists actively. Matching hosts on any of these lists will be automatically banned from the network upon connection.
|
||||
|
||||
**DNSBL based bans will expire after 30 days.**
|
||||
|
||||
---
|
||||
|
||||
## Ban Evasion
|
||||
|
||||
We are aware that this is IRC and people will try to evade bans by changing their host. By all means, go ahead and try. You may carry on and chat, but there is nothing stopping an operator from placing another ban on your host again if they notice or care.
|
||||
|
||||
---
|
||||
|
||||
## Ban Exemptions
|
||||
|
||||
There are times where your host may be on the same host as a user who has been banned, making the ban affect you by accident.
|
||||
|
||||
There are also times where you may hit a connection limit from too many people connected from the same IP address. This most commonly occurs with people using a web client such as [Mibbit](https://www.mibbit.com/) or [KiwiIRC](https://kiwiirc.com/), and people using [IRCCloud](https://www.irccloud.com/).
|
||||
|
||||
#### Channel Exemptions
|
||||
|
||||
Channel exemptions can be done through use of the `+e` mode. Exemptions include host based, nickserv account based, & SSL client certificate fingerprint based.
|
||||
|
||||
You can request a channel ban exemption by asking one of the channels operators.
|
||||
|
||||
#### Network Exemptions
|
||||
|
||||
If your host was added to the DNSBL lists by accident you may request a ban exemption.
|
||||
|
||||
These exemptions are given out scarcely and only to known trusted users. You may contact us if you feel you qualify for a ban exemption.
|
||||
78
wiki/CHANNEL-MODES.md
Normal file
78
wiki/CHANNEL-MODES.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# CHANNEL MODES
|
||||
|
||||
#### Usage:
|
||||
|
||||
```
|
||||
/mode #channel [+|-]<MODE> [ARGUMENTS]
|
||||
```
|
||||
|
||||
#### Examples:
|
||||
|
||||
```
|
||||
/mode #superbowl -m
|
||||
/mode #superbowl +k secretpassword
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Key
|
||||
|
||||
`β
= Set by default ` `π = Can not be turned off`
|
||||
|
||||
## Access Levels
|
||||
|
||||
| Mode | Name | Description |
|
||||
|-------|--------|----------------------------------------------------------------|
|
||||
| **v** | Voice | Can speak in moderated *(+m)* channels |
|
||||
| **h** | Halfop | Same as channel operator, just can't `/KICK` channel operators |
|
||||
| **o** | Op | Channel operator |
|
||||
|
||||
---
|
||||
|
||||
## List Modes
|
||||
|
||||
| Mode | Name | Description |
|
||||
|-------|--------|------------------------------------------|
|
||||
| **b** | Ban | Prevent users matching mask from joining |
|
||||
| **e** | Except | Exception to ban list |
|
||||
| **I** | Invite | Exception to invite-only mode |
|
||||
|
||||
---
|
||||
|
||||
## Channel Modes
|
||||
|
||||
| | Mode | Name | Description | Restriction |
|
||||
|----|-------|---------------|-------------------------------------|-------------|
|
||||
| | **c** | NoColor | Block color | |
|
||||
| | **C** | NoCTCP | Block CTCP | |
|
||||
| | **d** | DelayJoinTemp | Temporary processing delayed users | *Server* |
|
||||
| | **D** | DelayJoin | Hide joins until user speaks | |
|
||||
| | **f** | Flood | Custom anti-flood settings | |
|
||||
| | **F** | FloodProfile | Anti-flood protection profile | |
|
||||
| | **G** | Censor | Filter bad words | |
|
||||
| | **H** | History | Show message history | |
|
||||
| | **i** | InviteOnly | Require `/INVITE` to join | |
|
||||
| | **k** | Key | Require password to join | |
|
||||
| | **K** | NoKnock | Block `/KNOCK` | |
|
||||
| | **l** | Limit | Max users limit | |
|
||||
| π | **L** | Link | Forward users to another channel | |
|
||||
| | **m** | Moderated | Only voiced *(+v)* users can speak | |
|
||||
| | **M** | RegSpeak | Only registered users can speak | |
|
||||
| π | **n** | NoExternal | Block outside messages | |
|
||||
| | **N** | NoNickChange | Prevent `/NICK` | |
|
||||
| | **O** | OperOnly | Only IRC operators can join | *Oper* |
|
||||
| π | **p** | Private | Hide channel from `/WHOIS` | |
|
||||
| π | **P** | Permanent | Channel persists when empty | *Oper* |
|
||||
| | **Q** | NoKick | Block `/KICK` | |
|
||||
| | **r** | Registered | Channel is registered with services | *Server* |
|
||||
| | **R** | RegOnly | Only registered users can join | |
|
||||
| π | **s** | Secret | Hidden from `/LIST` & `/WHOIS` | |
|
||||
| | **S** | StripColor | Strip color | |
|
||||
| | **t** | TopicLimit | Only channel operators can `/TOPIC` | |
|
||||
| | **T** | NoNotice | Block `/NOTICE` | |
|
||||
| | **V** | NoInvite | Block `/INVITE` | |
|
||||
| | **z** | SecureOnly | Only SSL/TLS users can join | |
|
||||
| | **Z** | AllSecure | All users are using TLS | *Server* |
|
||||
|
||||
---
|
||||
|
||||
16
wiki/CHANNELS.md
Normal file
16
wiki/CHANNELS.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# Channels
|
||||
|
||||
| Channel | Description |
|
||||
|------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
|
||||
| [**#5000**](#5000) | **THE BEST 5000 CHANNELS ON IRC** |
|
||||
| [**#anythinggoes**](#anythinggoes) | **NO KICKS NO BANS NO OPS NO RULES** |
|
||||
| [**#blackhole**](#blackhole) | ENTER THE VOID *(Honeypot)* |
|
||||
| [**#comms**](#comms) | Radio chats focused on SDR, LoRa, Meshtastic, etc |
|
||||
| [**#dev**](#dev) | Programming & development discussion & testing |
|
||||
| [**#exchange**](#exchange) | IRC cryptocurrency exchange |
|
||||
| [**#hardchats**](#hardchats) | [hardchats.com](https://hardchats.com) |
|
||||
| [**#mensa**](#mensa) | REAL NIGGAS ONLY |
|
||||
| [**#scroll**](#scroll) | ASCII/ANSI Art |
|
||||
| [**#superbowl**](#superbowl) | THE THUNDERDOME, psychotherapy, `/dev/urandom`, toxic HATE mongering, HARD fucking CHATS *(warning: sociopaths prevalent)* |
|
||||
|
||||
**Note:** ALL channels on the network have the `+s` *(secret)* mode by locked on by default, making them hidden from `/LIST`. You can request to have your channel set to `-s` to make it visible, but this is only granted to channels that are actively being used and have a substantial user base. Small private channels with only 2-3 people will remain secret.
|
||||
48
wiki/CLIENTS.md
Normal file
48
wiki/CLIENTS.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# IRC Clients
|
||||
|
||||
## Terminal
|
||||
|
||||
### [WeeChat](https://weechat.org/)
|
||||
A fast, light, and extensible chat client. WeeChat is highly customizable with scripts and plugins, supports multiple protocols, and features a clean interface with powerful features like split windows, mouse support, and scripting in multiple languages (Python, Perl, Ruby, Lua, etc.).
|
||||
|
||||
### [Irssi](https://irssi.org/)
|
||||
A modular text-mode IRC client known for its active development and flexibility. Irssi is highly scriptable with Perl and features a robust set of features for power users, including excellent logging, proxy support, and a strong plugin ecosystem.
|
||||
|
||||
---
|
||||
|
||||
## Desktop
|
||||
|
||||
### [HexChat](https://hexchat.github.io/)
|
||||
A popular graphical IRC client based on XChat, available for Windows and Linux. HexChat offers a user-friendly interface with spell checking, multiple server connections, customizable alerts, and extensive scripting support through Python and Perl plugins.
|
||||
|
||||
**Warning:** This client is has hit its [sunset](https://hexchat.github.io/news/2.16.2.htmlhttps://hexchat.github.io/news/2.16.2.html) & is no longer being maintained. Watch out for 0days!
|
||||
|
||||
### [mIRC](https://www.mirc.com/)
|
||||
The classic Windows IRC client that has been around since 1995. mIRC features a powerful scripting language, file sharing via DCC, customizable interface, and extensive sound and event triggering capabilities. It remains one of the most popular IRC clients on Windows.
|
||||
|
||||
---
|
||||
|
||||
## Web
|
||||
|
||||
### [HardLounge](https://webchat.supernets.org)
|
||||
A fork of [TheLounge](https://thelounge.chat/) customized for dark mode, better color support, monospace font & no line spacing for ASCII support.
|
||||
|
||||
### [TheLounge](https://thelounge.chat/)
|
||||
A modern, self-hosted web IRC client that runs 24/7 on your server. TheLounge features a responsive interface, persistent connections, message history, and multi-device support. It's perfect for users who want to stay connected without running a local client.
|
||||
|
||||
### [Glowing Bear](https://www.glowing-bear.org/)
|
||||
A web-based frontend for WeeChat that connects via the WeeChat relay protocol. Glowing Bear provides a sleek, modern interface to access your WeeChat instance from any browser, complete with notifications, multi-device sync, and mobile support.
|
||||
|
||||
---
|
||||
|
||||
## Mobile
|
||||
|
||||
### [WeeChat Relay](https://weechat.org/about/features/)
|
||||
Mobile applications that connect to your WeeChat instance via the relay protocol. These apps allow you to access your persistent WeeChat session from your phone, maintaining your connection, scrollback, and configuration.
|
||||
|
||||
**Apps:**
|
||||
- [Weechat-Android](https://github.com/ubergeek42/weechat-android) - Android client
|
||||
- [weechat-ios](https://github.com/mhoran/weechatRN) - iOS client
|
||||
|
||||
### [IRCCloud](https://www.irccloud.com/)
|
||||
A commercial IRC bouncer and client service with native mobile apps. IRCCloud keeps you connected 24/7 with push notifications, searchable message history, file uploads, and a polished interface across iOS and Android. Offers both free and paid tiers.
|
||||
112
wiki/COMMANDS.md
Normal file
112
wiki/COMMANDS.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# COMMANDS
|
||||
|
||||
#### Usage:
|
||||
|
||||
```
|
||||
/<COMMAND> [ARGUMENTS]
|
||||
```
|
||||
|
||||
#### Examples:
|
||||
|
||||
```
|
||||
/whois acidvegas
|
||||
/mode #superbowl +m
|
||||
/kick #superbowl baduser Stop spamming!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Public Commands
|
||||
|
||||
| Command | Arguments | Description |
|
||||
|--------------|-----------------------------|-----------------------------------------|
|
||||
| **ADMIN** | | Show server administrator information |
|
||||
| **AWAY** | | Marked as away or back |
|
||||
| **CAP** | | Set IRCv3 capabilities |
|
||||
| **CYCLE** | `<channel>` | Rejoin a channel |
|
||||
| **INVITE** | `<nick> <channel>` | Invite a user to a channel |
|
||||
| **ISON** | `<nick> [nick] ...` | Check if users are online |
|
||||
| **JOIN** | `<channel>` | Join a channel |
|
||||
| **KICK** | `<channel> <nick> [reason]` | Kick a user from a channel |
|
||||
| **KNOCK** | `<channel> [message]` | Request invitation to channel |
|
||||
| **LAG** | | Check server lag and connection quality |
|
||||
| **LINKS** | | Show linked servers |
|
||||
| **LIST** | `[options]` | List channels and their topics |
|
||||
| **LUSERS** | | Show statistics about users and servers |
|
||||
| **MAP** | | Display network server map |
|
||||
| **MODE** | `<target> <modes>` | Change user or channel modes |
|
||||
| **MOTD** | `[server]` | Show Message Of The Day |
|
||||
| **NAMES** | `<channel>` | Show users in a channel |
|
||||
| **NICK** | `<newnick>` | Change your nickname |
|
||||
| **NOTICE** | `<target> <message>` | Send a notice message |
|
||||
| **OPER** | `<username> <password>` | Authenticate as an IRC operator |
|
||||
| **PART** | `<channel> [reason]` | Leave a channel |
|
||||
| **PASS** | `<password>` | Server password |
|
||||
| **PING** | `<target>` | Test connection latency |
|
||||
| **PONG** | `<target>` | Response to PING |
|
||||
| **PRIVMSG** | `<target> <message>` | Send a private message |
|
||||
| **QUIT** | `[reason]` | Disconnect from IRC |
|
||||
| **RULES** | | Show server rules |
|
||||
| **SETNAME** | `<realname>` | Change your own real name |
|
||||
| **SILENCE** | `[+/-]<mask>` | Block private messages from users |
|
||||
| **TAGMSG** | | Send message tags without text |
|
||||
| **TIME** | `[server]` | Show server time |
|
||||
| **TOPIC** | `<channel> [topic]` | View or set channel topic |
|
||||
| **USER** | | Set username during connection |
|
||||
| **USERHOST** | `<nick>` | Show nick, user, and host information |
|
||||
| **USERIP** | `<nick>` | Show user IP address |
|
||||
| **VERSION** | `[server]` | Show server version information |
|
||||
| **VHOST** | `<login> <password>` | Authenticate for a virtual host |
|
||||
| **WATCH** | | Monitor online/offline status of users |
|
||||
| **WHO** | `[mask] [options]` | Search and display user information |
|
||||
| **WHOIS** | `<nick> [nick]` | Show detailed user information |
|
||||
|
||||
---
|
||||
|
||||
## IRCOp Commands
|
||||
|
||||
| Command | Arguments | Description |
|
||||
|----------------|-------------------------------|--------------------------------------|
|
||||
| **CHGHOST** | `<nick> <host>` | Change hostname of someone |
|
||||
| **CHGIDENT** | `<nick> <ident>` | Change ident/username of someone |
|
||||
| **CHGNAME** | `<nick> <name>` | Change real-name of someone |
|
||||
| **GLINE** | `<user@host> <time> <reason>` | Add a global ban |
|
||||
| **GZLINE** | `<IP> <time> <reason>` | Add a global IP ban |
|
||||
| **KILL** | `<nick> <reason>` | Disconnect a user from IRC |
|
||||
| **KLINE** | `<user@host> <time> <reason>` | Add a local server ban |
|
||||
| **QLINE** | `<nickname> <time> <reason>` | Ban a nickname pattern |
|
||||
| **SAJOIN** | `<nick> <channel>` | Force a user to join a channel |
|
||||
| **SAMODE** | `<target> <modes>` | Force mode changes |
|
||||
| **SANICK** | `<nick> <newnick>` | Force a user to change nickname |
|
||||
| **SAPART** | `<nick> <channel>` | Force a user to leave a channel |
|
||||
| **SAQUIT** | `<nick> <reason>` | Force a user to disconnect |
|
||||
| **SATOPIC** | `<channel> <topic>` | Force set a channel topic |
|
||||
| **SETHOST** | `<host>` | Change your own hostname |
|
||||
| **SETIDENT** | `<ident>` | Change your own ident |
|
||||
| **SHUN** | `<user@host> <time> <reason>` | Prevent user from executing commands |
|
||||
| **SPAMFILTER** | | Manage spam filters |
|
||||
| **SQLINE** | `<mask> <reason>` | Ban nickname patterns |
|
||||
| **STATS** | `<type> [server]` | Show various server statistics |
|
||||
| **TRACE** | `<server\|nick>` | Trace the path to server or nick |
|
||||
|
||||
---
|
||||
|
||||
## Server Commands
|
||||
|
||||
| Command | Arguments | Description |
|
||||
|-------------------|---------------------|-----------------------------------------|
|
||||
| **CLOSE** | | Close pending connections |
|
||||
| **CONNECT** | `<server>` | Start linking to server |
|
||||
| **DIE** | | Shutdown the IRC server |
|
||||
| **GLOADMODULE** | | Globally load a module on all servers |
|
||||
| **GRELOADMODULE** | | Globally reload a module on all servers |
|
||||
| **GUNLOADMODULE** | | Globally unload a module on all servers |
|
||||
| **LOADMODULE** | | Load a module on local server |
|
||||
| **MKPASSWD** | `<password>` | Generate encrypted password hash |
|
||||
| **MODULES** | | List loaded modules |
|
||||
| **REHASH** | `[options]` | Reload server configuration |
|
||||
| **RELOADMODULE** | | Reload a module on local server |
|
||||
| **RESTART** | | Restart the IRC server |
|
||||
| **SERVER** | | Server linking command |
|
||||
| **SQUIT** | `<server> <reason>` | Disconnect a server from the network |
|
||||
| **TSCTL** | | Time synchronization control |
|
||||
1
wiki/Home.md
Normal file
1
wiki/Home.md
Normal file
@@ -0,0 +1 @@
|
||||
Welcome to the Wiki.
|
||||
4
wiki/MODES.md
Normal file
4
wiki/MODES.md
Normal file
@@ -0,0 +1,4 @@
|
||||
- [Channel Modes](./CHANNEL-MODES)
|
||||
- [Extended Modes](./EXTENDED-MODES)
|
||||
- [Snomasks](./SNOMASKS)
|
||||
- [User Modes](./USER-MODES)
|
||||
4
wiki/RFC.md
Normal file
4
wiki/RFC.md
Normal file
@@ -0,0 +1,4 @@
|
||||
- [RFC2810 - Architecture](./RFC2810)
|
||||
- [RFC2811 - Channel Management](./RFC2811)
|
||||
- [RFC2812 - Client Protocol](./RFC2812)
|
||||
- [RFC2813 - Server Protocol](./RFC2813)
|
||||
267
wiki/RFC2810.md
Normal file
267
wiki/RFC2810.md
Normal file
@@ -0,0 +1,267 @@
|
||||
# RFC 2810 - Internet Relay Chat: Architecture
|
||||
|
||||
**Network Working Group:** C. Kalt
|
||||
**Request for Comments:** 2810
|
||||
**Updates:** 1459
|
||||
**Category:** Informational
|
||||
**Date:** April 2000
|
||||
|
||||
## Status of this Memo
|
||||
|
||||
This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.
|
||||
|
||||
## Copyright Notice
|
||||
|
||||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||||
|
||||
## Abstract
|
||||
|
||||
The IRC (Internet Relay Chat) protocol is for use with text based conferencing. It has been developed since 1989 when it was originally implemented as a mean for users on a BBS to chat amongst themselves.
|
||||
|
||||
First formally documented in May 1993 by RFC 1459 [IRC], the protocol has kept evolving. This document is an update describing the architecture of the current IRC protocol and the role of its different components. Other documents describe in detail the protocol used between the various components defined here.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [1. Introduction](#1-introduction)
|
||||
- [2. Components](#2-components)
|
||||
- [2.1 Servers](#21-servers)
|
||||
- [2.2 Clients](#22-clients)
|
||||
- [2.2.1 User Clients](#221-user-clients)
|
||||
- [2.2.2 Service Clients](#222-service-clients)
|
||||
- [3. Architecture](#3-architecture)
|
||||
- [4. IRC Protocol Services](#4-irc-protocol-services)
|
||||
- [4.1 Client Locator](#41-client-locator)
|
||||
- [4.2 Message Relaying](#42-message-relaying)
|
||||
- [4.3 Channel Hosting And Management](#43-channel-hosting-and-management)
|
||||
- [5. IRC Concepts](#5-irc-concepts)
|
||||
- [5.1 One-To-One Communication](#51-one-to-one-communication)
|
||||
- [5.2 One-To-Many](#52-one-to-many)
|
||||
- [5.2.1 To A Channel](#521-to-a-channel)
|
||||
- [5.2.2 To A Host/Server Mask](#522-to-a-hostserver-mask)
|
||||
- [5.2.3 To A List](#523-to-a-list)
|
||||
- [5.3 One-To-All](#53-one-to-all)
|
||||
- [5.3.1 Client-to-Client](#531-client-to-client)
|
||||
- [5.3.2 Client-to-Server](#532-client-to-server)
|
||||
- [5.3.3 Server-to-Server](#533-server-to-server)
|
||||
- [6. Current Problems](#6-current-problems)
|
||||
- [6.1 Scalability](#61-scalability)
|
||||
- [6.2 Reliability](#62-reliability)
|
||||
- [6.3 Network Congestion](#63-network-congestion)
|
||||
- [6.4 Privacy](#64-privacy)
|
||||
- [7. Security Considerations](#7-security-considerations)
|
||||
- [8. Current Support And Availability](#8-current-support-and-availability)
|
||||
- [9. Acknowledgements](#9-acknowledgements)
|
||||
- [10. References](#10-references)
|
||||
- [11. Author's Address](#11-authors-address)
|
||||
- [12. Full Copyright Statement](#12-full-copyright-statement)
|
||||
|
||||
## 1. Introduction
|
||||
|
||||
The IRC (Internet Relay Chat) protocol has been designed over a number of years for use with text based conferencing. This document describes its current architecture.
|
||||
|
||||
The IRC Protocol is based on the client-server model, and is well suited to running on many machines in a distributed fashion. A typical setup involves a single process (the server) forming a central point for clients (or other servers) to connect to, performing the required message delivery/multiplexing and other functions.
|
||||
|
||||
This distributed model, which requires each server to have a copy of the global state information, is still the most flagrant problem of the protocol as it is a serious handicap, which limits the maximum size a network can reach. If the existing networks have been able to keep growing at an incredible pace, we must thank hardware manufacturers for giving us ever more powerful systems.
|
||||
|
||||
## 2. Components
|
||||
|
||||
The following paragraphs define the basic components of the IRC protocol.
|
||||
|
||||
### 2.1 Servers
|
||||
|
||||
The server forms the backbone of IRC as it is the only component of the protocol which is able to link all the other components together: it provides a point to which clients may connect to talk to each other [IRC-CLIENT], and a point for other servers to connect to [IRC-SERVER]. The server is also responsible for providing the basic services defined by the IRC protocol.
|
||||
|
||||
### 2.2 Clients
|
||||
|
||||
A client is anything connecting to a server that is not another server. There are two types of clients which both serve a different purpose.
|
||||
|
||||
#### 2.2.1 User Clients
|
||||
|
||||
User clients are generally programs providing a text based interface that is used to communicate interactively via IRC. This particular type of clients is often referred as "users".
|
||||
|
||||
#### 2.2.2 Service Clients
|
||||
|
||||
Unlike users, service clients are not intended to be used manually nor for talking. They have a more limited access to the chat functions of the protocol, while optionally having access to more private data from the servers.
|
||||
|
||||
Services are typically automatons used to provide some kind of service (not necessarily related to IRC itself) to users. An example is a service collecting statistics about the origin of users connected on the IRC network.
|
||||
|
||||
## 3. Architecture
|
||||
|
||||
An IRC network is defined by a group of servers connected to each other. A single server forms the simplest IRC network.
|
||||
|
||||
The only network configuration allowed for IRC servers is that of a spanning tree where each server acts as a central node for the rest of the network it sees.
|
||||
|
||||
```
|
||||
1--\
|
||||
A D---4
|
||||
2--/ \ /
|
||||
B----C
|
||||
/ \
|
||||
3 E
|
||||
|
||||
Servers: A, B, C, D, E Clients: 1, 2, 3, 4
|
||||
```
|
||||
|
||||
**Figure 1.** Sample small IRC network
|
||||
|
||||
The IRC protocol provides no mean for two clients to directly communicate. All communication between clients is relayed by the server(s).
|
||||
|
||||
## 4. IRC Protocol Services
|
||||
|
||||
This section describes the services offered by the IRC protocol. The combination of these services allow real-time conferencing.
|
||||
|
||||
### 4.1 Client Locator
|
||||
|
||||
To be able to exchange messages, two clients must be able to locate each other.
|
||||
|
||||
Upon connecting to a server, a client registers using a label which is then used by other servers and clients to know where the client is located. Servers are responsible for keeping track of all the labels being used.
|
||||
|
||||
### 4.2 Message Relaying
|
||||
|
||||
The IRC protocol provides no mean for two clients to directly communicate. All communication between clients is relayed by the server(s).
|
||||
|
||||
### 4.3 Channel Hosting And Management
|
||||
|
||||
A channel is a named group of one or more users which will all receive messages addressed to that channel. A channel is characterized by its name and current members, it also has a set of properties which can be manipulated by (some of) its members.
|
||||
|
||||
Channels provide a mean for a message to be sent to several clients. Servers host channels, providing the necessary message multiplexing. Servers are also responsible for managing channels by keeping track of the channel members. The exact role of servers is defined in "Internet Relay Chat: Channel Management" [IRC-CHAN].
|
||||
|
||||
## 5. IRC Concepts
|
||||
|
||||
This section is devoted to describing the actual concepts behind the organization of the IRC protocol and how different classes of messages are delivered.
|
||||
|
||||
### 5.1 One-To-One Communication
|
||||
|
||||
Communication on a one-to-one basis is usually performed by clients, since most server-server traffic is not a result of servers talking only to each other. To provide a means for clients to talk to each other, it is REQUIRED that all servers be able to send a message in exactly one direction along the spanning tree in order to reach any client. Thus the path of a message being delivered is the shortest path between any two points on the spanning tree.
|
||||
|
||||
The following examples all refer to Figure 1 above.
|
||||
|
||||
**Example 1:** A message between clients 1 and 2 is only seen by server A, which sends it straight to client 2.
|
||||
|
||||
**Example 2:** A message between clients 1 and 3 is seen by servers A & B, and client 3. No other clients or servers are allowed see the message.
|
||||
|
||||
**Example 3:** A message between clients 2 and 4 is seen by servers A, B, C & D and client 4 only.
|
||||
|
||||
### 5.2 One-To-Many
|
||||
|
||||
The main goal of IRC is to provide a forum which allows easy and efficient conferencing (one to many conversations). IRC offers several means to achieve this, each serving its own purpose.
|
||||
|
||||
#### 5.2.1 To A Channel
|
||||
|
||||
In IRC the channel has a role equivalent to that of the multicast group; their existence is dynamic and the actual conversation carried out on a channel MUST only be sent to servers which are supporting users on a given channel. Moreover, the message SHALL only be sent once to every local link as each server is responsible to fan the original message to ensure that it will reach all the recipients.
|
||||
|
||||
The following examples all refer to Figure 2.
|
||||
|
||||
**Example 4:** Any channel with 1 client in it. Messages to the channel go to the server and then nowhere else.
|
||||
|
||||
**Example 5:** 2 clients in a channel. All messages traverse a path as if they were private messages between the two clients outside a channel.
|
||||
|
||||
**Example 6:** Clients 1, 2 and 3 in a channel. All messages to the channel are sent to all clients and only those servers which must be traversed by the message if it were a private message to a single client. If client 1 sends a message, it goes back to client 2 and then via server B to client 3.
|
||||
|
||||
#### 5.2.2 To A Host/Server Mask
|
||||
|
||||
To provide with some mechanism to send messages to a large body of related users, host and server mask messages are available. These messages are sent to users whose host or server information match that of the mask. The messages are only sent to locations where users are, in a fashion similar to that of channels.
|
||||
|
||||
#### 5.2.3 To A List
|
||||
|
||||
The least efficient style of one-to-many conversation is through clients talking to a 'list' of targets (client, channel, mask). How this is done is almost self explanatory: the client gives a list of destinations to which the message is to be delivered and the server breaks it up and dispatches a separate copy of the message to each given destination.
|
||||
|
||||
This is not as efficient as using a channel since the destination list MAY be broken up and the dispatch sent without checking to make sure duplicates aren't sent down each path.
|
||||
|
||||
### 5.3 One-To-All
|
||||
|
||||
The one-to-all type of message is better described as a broadcast message, sent to all clients or servers or both. On a large network of users and servers, a single message can result in a lot of traffic being sent over the network in an effort to reach all of the desired destinations.
|
||||
|
||||
For some class of messages, there is no option but to broadcast it to all servers so that the state information held by each server is consistent between servers.
|
||||
|
||||
#### 5.3.1 Client-to-Client
|
||||
|
||||
There is no class of message which, from a single message, results in a message being sent to every other client.
|
||||
|
||||
#### 5.3.2 Client-to-Server
|
||||
|
||||
Most of the commands which result in a change of state information (such as channel membership, channel mode, user status, etc.) MUST be sent to all servers by default, and this distribution SHALL NOT be changed by the client.
|
||||
|
||||
#### 5.3.3 Server-to-Server
|
||||
|
||||
While most messages between servers are distributed to all 'other' servers, this is only required for any message that affects a user, channel or server. Since these are the basic items found in IRC, nearly all messages originating from a server are broadcast to all other connected servers.
|
||||
|
||||
## 6. Current Problems
|
||||
|
||||
There are a number of recognized problems with this protocol, this section only addresses the problems related to the architecture of the protocol.
|
||||
|
||||
### 6.1 Scalability
|
||||
|
||||
It is widely recognized that this protocol does not scale sufficiently well when used in a large arena. The main problem comes from the requirement that all servers know about all other servers, clients and channels and that information regarding them be updated as soon as it changes.
|
||||
|
||||
### 6.2 Reliability
|
||||
|
||||
As the only network configuration allowed for IRC servers is that of a spanning tree, each link between two servers is an obvious and quite serious point of failure. This particular issue is addressed more in detail in "Internet Relay Chat: Server Protocol" [IRC-SERVER].
|
||||
|
||||
### 6.3 Network Congestion
|
||||
|
||||
Another problem related to the scalability and reliability issues, as well as the spanning tree architecture, is that the protocol and architecture for IRC are extremely vulnerable to network congestions. This problem is endemic, and should be solved for the next generation: if congestion and high traffic volume cause a link between two servers to fail, not only this failure generates more network traffic, but the reconnection (eventually elsewhere) of two servers also generates more traffic.
|
||||
|
||||
In an attempt to minimize the impact of these problems, it is strongly RECOMMENDED that servers do not automatically try to reconnect too fast, in order to avoid aggravating the situation.
|
||||
|
||||
### 6.4 Privacy
|
||||
|
||||
Besides not scaling well, the fact that servers need to know all information about other entities, the issue of privacy is also a concern. This is in particular true for channels, as the related information is quite a lot more revealing than whether a user is online or not.
|
||||
|
||||
## 7. Security Considerations
|
||||
|
||||
Asides from the privacy concerns mentioned in section 6.4 (Privacy), security is believed to be irrelevant to this document.
|
||||
|
||||
## 8. Current Support And Availability
|
||||
|
||||
**Mailing lists for IRC related discussion:**
|
||||
- General discussion: ircd-users@irc.org
|
||||
- Protocol development: ircd-dev@irc.org
|
||||
|
||||
**Software implementations:**
|
||||
- ftp://ftp.irc.org/irc/server
|
||||
- ftp://ftp.funet.fi/pub/unix/irc
|
||||
- ftp://coombs.anu.edu.au/pub/irc
|
||||
|
||||
**Newsgroup:** alt.irc
|
||||
|
||||
## 9. Acknowledgements
|
||||
|
||||
Parts of this document were copied from the RFC 1459 [IRC] which first formally documented the IRC Protocol. It has also benefited from many rounds of review and comments. In particular, the following people have made significant contributions to this document:
|
||||
|
||||
Matthew Green, Michael Neumayer, Volker Paulsen, Kurt Roeckx, Vesa Ruokonen, Magnus Tjernstrom, Stefan Zehl.
|
||||
|
||||
## 10. References
|
||||
|
||||
**[KEYWORDS]** Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||||
|
||||
**[IRC]** Oikarinen, J. and D. Reed, "Internet Relay Chat Protocol", RFC 1459, May 1993.
|
||||
|
||||
**[IRC-CLIENT]** Kalt, C., "Internet Relay Chat: Client Protocol", RFC 2812, April 2000.
|
||||
|
||||
**[IRC-SERVER]** Kalt, C., "Internet Relay Chat: Server Protocol", RFC 2813, April 2000.
|
||||
|
||||
**[IRC-CHAN]** Kalt, C., "Internet Relay Chat: Channel Management", RFC 2811, April 2000.
|
||||
|
||||
## 11. Author's Address
|
||||
|
||||
Christophe Kalt
|
||||
99 Teaneck Rd, Apt #117
|
||||
Ridgefield Park, NJ 07660
|
||||
USA
|
||||
|
||||
EMail: kalt@stealth.net
|
||||
|
||||
## 12. Full Copyright Statement
|
||||
|
||||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||||
|
||||
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
|
||||
|
||||
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
|
||||
|
||||
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
### Acknowledgement
|
||||
|
||||
Funding for the RFC Editor function is currently provided by the Internet Society.
|
||||
460
wiki/RFC2811.md
Normal file
460
wiki/RFC2811.md
Normal file
@@ -0,0 +1,460 @@
|
||||
# RFC 2811 - Internet Relay Chat: Channel Management
|
||||
|
||||
**Network Working Group:** C. Kalt
|
||||
**Request for Comments:** 2811
|
||||
**Updates:** 1459
|
||||
**Category:** Informational
|
||||
**Date:** April 2000
|
||||
|
||||
## Status of this Memo
|
||||
|
||||
This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.
|
||||
|
||||
## Copyright Notice
|
||||
|
||||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||||
|
||||
## Abstract
|
||||
|
||||
One of the most notable characteristics of the IRC (Internet Relay Chat) protocol is to allow for users to be grouped in forums, called channels, providing a mean for multiple users to communicate together.
|
||||
|
||||
There was originally a unique type of channels, but with the years, new types appeared either as a response to a need, or for experimental purposes.
|
||||
|
||||
This document specifies how channels, their characteristics and properties are managed by IRC servers.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [1. Introduction](#1-introduction)
|
||||
- [2. Channel Characteristics](#2-channel-characteristics)
|
||||
- [2.1 Namespace](#21-namespace)
|
||||
- [2.2 Channel Scope](#22-channel-scope)
|
||||
- [2.3 Channel Properties](#23-channel-properties)
|
||||
- [2.4 Privileged Channel Members](#24-privileged-channel-members)
|
||||
- [2.4.1 Channel Operators](#241-channel-operators)
|
||||
- [2.4.2 Channel Creator](#242-channel-creator)
|
||||
- [3. Channel Lifetime](#3-channel-lifetime)
|
||||
- [3.1 Standard Channels](#31-standard-channels)
|
||||
- [3.2 Safe Channels](#32-safe-channels)
|
||||
- [4. Channel Modes](#4-channel-modes)
|
||||
- [4.1 Member Status](#41-member-status)
|
||||
- [4.1.1 "Channel Creator" Status](#411-channel-creator-status)
|
||||
- [4.1.2 Channel Operator Status](#412-channel-operator-status)
|
||||
- [4.1.3 Voice Privilege](#413-voice-privilege)
|
||||
- [4.2 Channel Flags](#42-channel-flags)
|
||||
- [4.2.1 Anonymous Flag](#421-anonymous-flag)
|
||||
- [4.2.2 Invite Only Flag](#422-invite-only-flag)
|
||||
- [4.2.3 Moderated Channel Flag](#423-moderated-channel-flag)
|
||||
- [4.2.4 No Messages To Channel From Clients On The Outside](#424-no-messages-to-channel-from-clients-on-the-outside)
|
||||
- [4.2.5 Quiet Channel](#425-quiet-channel)
|
||||
- [4.2.6 Private and Secret Channels](#426-private-and-secret-channels)
|
||||
- [4.2.7 Server Reop Flag](#427-server-reop-flag)
|
||||
- [4.2.8 Topic](#428-topic)
|
||||
- [4.2.9 User Limit](#429-user-limit)
|
||||
- [4.2.10 Channel Key](#4210-channel-key)
|
||||
- [4.3 Channel Access Control](#43-channel-access-control)
|
||||
- [4.3.1 Channel Ban and Exception](#431-channel-ban-and-exception)
|
||||
- [4.3.2 Channel Invitation](#432-channel-invitation)
|
||||
- [5. Current Implementations](#5-current-implementations)
|
||||
- [5.1 Tracking Recently Used Channels](#51-tracking-recently-used-channels)
|
||||
- [5.2 Safe Channels](#52-safe-channels)
|
||||
- [5.2.1 Channel Identifier](#521-channel-identifier)
|
||||
- [5.2.2 Channel Delay](#522-channel-delay)
|
||||
- [5.2.3 Abuse Window](#523-abuse-window)
|
||||
- [5.2.4 Preserving Sanity In The Name Space](#524-preserving-sanity-in-the-name-space)
|
||||
- [5.2.5 Server Reop Mechanism](#525-server-reop-mechanism)
|
||||
- [6. Current Problems](#6-current-problems)
|
||||
- [6.1 Labels](#61-labels)
|
||||
- [6.1.1 Channel Delay](#611-channel-delay)
|
||||
- [6.1.2 Safe Channels](#612-safe-channels)
|
||||
- [6.2 Mode Propagation Delays](#62-mode-propagation-delays)
|
||||
- [6.3 Collisions And Channel Modes](#63-collisions-and-channel-modes)
|
||||
- [6.4 Resource Exhaustion](#64-resource-exhaustion)
|
||||
- [7. Security Considerations](#7-security-considerations)
|
||||
- [7.1 Access Control](#71-access-control)
|
||||
- [7.2 Channel Privacy](#72-channel-privacy)
|
||||
- [7.3 Anonymity](#73-anonymity)
|
||||
- [8. Current Support and Availability](#8-current-support-and-availability)
|
||||
- [9. Acknowledgements](#9-acknowledgements)
|
||||
- [10. References](#10-references)
|
||||
- [11. Author's Address](#11-authors-address)
|
||||
- [12. Full Copyright Statement](#12-full-copyright-statement)
|
||||
|
||||
## 1. Introduction
|
||||
|
||||
This document defines in detail on how channels are managed by the IRC servers and will be mostly useful to people working on implementing an IRC server.
|
||||
|
||||
While the concepts defined here are an important part of IRC, they remain non essential for implementing clients. While the trend seems to be towards more and more complex and "intelligent" clients which are able to take advantage of knowing the internal workings of channels to provide the users with a more friendly interface, simple clients can be implemented without reading this document.
|
||||
|
||||
Many of the concepts defined here were designed with the IRC architecture [IRC-ARCH] in mind and mostly make sense in this context. However, many others could be applied to other architectures in order to provide forums for a conferencing system.
|
||||
|
||||
Finally, it is to be noted that IRC users may find some of the following sections of interest, in particular sections 2 (Channel Characteristics) and 4 (Channel Modes).
|
||||
|
||||
## 2. Channel Characteristics
|
||||
|
||||
A channel is a named group of one or more users which will all receive messages addressed to that channel. A channel is characterized by its name, properties and current members.
|
||||
|
||||
### 2.1 Namespace
|
||||
|
||||
Channels names are strings (beginning with a '&', '#', '+' or '!' character) of length up to fifty (50) characters. Channel names are case insensitive.
|
||||
|
||||
Apart from the the requirement that the first character being either '&', '#', '+' or '!' (hereafter called "channel prefix"). The only restriction on a channel name is that it SHALL NOT contain any spaces (' '), a control G (^G or ASCII 7), a comma (',' which is used as a list item separator by the protocol). Also, a colon (':') is used as a delimiter for the channel mask. The exact syntax of a channel name is defined in "IRC Server Protocol" [IRC-SERVER].
|
||||
|
||||
The use of different prefixes effectively creates four (4) distinct namespaces for channel names. This is important because of the protocol limitations regarding namespaces (in general). See section 6.1 (Labels) for more details on these limitations.
|
||||
|
||||
### 2.2 Channel Scope
|
||||
|
||||
A channel entity is known by one or more servers on the IRC network. A user can only become member of a channel known by the server to which the user is directly connected. The list of servers which know of the existence of a particular channel MUST be a contiguous part of the IRC network, in order for the messages addressed to the channel to be sent to all the channel members.
|
||||
|
||||
Channels with '&' as prefix are local to the server where they are created.
|
||||
|
||||
Other channels are known to one (1) or more servers that are connected to the network, depending on the channel mask:
|
||||
|
||||
- If there is no channel mask, then the channel is known to all the servers.
|
||||
|
||||
- If there is a channel mask, then the channel MUST only be known to servers which has a local user on the channel, and to its neighbours if the mask matches both the local and neighbouring server names. Since other servers have absolutely no knowledge of the existence of such a channel, the area formed by the servers having a name matching the mask has to be contiguous for the channel to be known by all these servers. Channel masks are best used in conjunction with server hostmasking [IRC-SERVER].
|
||||
|
||||
### 2.3 Channel Properties
|
||||
|
||||
Each channel has its own properties, which are defined by channel modes. Channel modes can be manipulated by the channel members. The modes affect the way servers manage the channels.
|
||||
|
||||
Channels with '+' as prefix do not support channel modes. This means that all the modes are unset, with the exception of the 't' channel flag which is set.
|
||||
|
||||
### 2.4 Privileged Channel Members
|
||||
|
||||
In order for the channel members to keep some control over a channel, and some kind of sanity, some channel members are privileged. Only these members are allowed to perform the following actions on the channel:
|
||||
|
||||
- **INVITE** - Invite a client to an invite-only channel (mode +i)
|
||||
- **KICK** - Eject a client from the channel
|
||||
- **MODE** - Change the channel's mode, as well as members' privileges
|
||||
- **PRIVMSG** - Sending messages to the channel (mode +n, +m, +v)
|
||||
- **TOPIC** - Change the channel topic in a mode +t channel
|
||||
|
||||
#### 2.4.1 Channel Operators
|
||||
|
||||
The channel operators (also referred to as a "chop" or "chanop") on a given channel are considered to 'own' that channel. Ownership of a channel is shared among channel operators.
|
||||
|
||||
Channel operators are identified by the '@' symbol next to their nickname whenever it is associated with a channel (i.e., replies to the NAMES, WHO and WHOIS commands).
|
||||
|
||||
Since channels starting with the character '+' as prefix do not support channel modes, no member can therefore have the status of channel operator.
|
||||
|
||||
#### 2.4.2 Channel Creator
|
||||
|
||||
A user who creates a channel with the character '!' as prefix is identified as the "channel creator". Upon creation of the channel, this user is also given channel operator status.
|
||||
|
||||
In recognition of this status, the channel creators are endowed with the ability to toggle certain modes of the channel which channel operators may not manipulate.
|
||||
|
||||
A "channel creator" can be distinguished from a channel operator by issuing the proper MODE command. See the "IRC Client Protocol" [IRC-CLIENT] for more information on this topic.
|
||||
|
||||
## 3. Channel Lifetime
|
||||
|
||||
In regard to the lifetime of a channel, there are typically two groups of channels: standard channels which prefix is either '&', '#' or '+', and "safe channels" which prefix is '!'.
|
||||
|
||||
### 3.1 Standard Channels
|
||||
|
||||
These channels are created implicitly when the first user joins it, and cease to exist when the last user leaves it. While the channel exists, any client can reference the channel using the name of the channel.
|
||||
|
||||
The user creating a channel automatically becomes channel operator with the notable exception of channels which name is prefixed by the character '+', see section 4 (Channel modes). See section 2.4.1 (Channel Operators) for more details on this title.
|
||||
|
||||
In order to avoid the creation of duplicate channels (typically when the IRC network becomes disjoint because of a split between two servers), channel names SHOULD NOT be allowed to be reused by a user if a channel operator (See Section 2.4.1 (Channel Operators)) has recently left the channel because of a network split. If this happens, the channel name is temporarily unavailable. The duration while a channel remains unavailable should be tuned on a per IRC network basis. It is important to note that this prevents local users from creating a channel using the same name, but does not prevent the channel to be recreated by a remote user. The latter typically happens when the IRC network rejoins. Obviously, this mechanism only makes sense for channels which name begins with the character '#', but MAY be used for channels which name begins with the character '+'. This mechanism is commonly known as "Channel Delay".
|
||||
|
||||
### 3.2 Safe Channels
|
||||
|
||||
Unlike other channels, "safe channels" are not implicitly created. A user wishing to create such a channel MUST request the creation by sending a special JOIN command to the server in which the channel identifier (then unknown) is replaced by the character '!'. The creation process for this type of channel is strictly controlled. The user only chooses part of the channel name (known as the channel "short name"), the server automatically prepends the user provided name with a channel identifier consisting of five (5) characters. The channel name resulting from the combination of these two elements is unique, making the channel safe from abuses based on network splits.
|
||||
|
||||
The user who creates such a channel automatically becomes "channel creator". See section 2.4.2 (Channel Creator) for more details on this title.
|
||||
|
||||
A server MUST NOT allow the creation of a new channel if another channel with the same short name exists; or if another channel with the same short name existed recently AND any of its member(s) left because of a network split. Such channel ceases to exist after last user leaves AND no other member recently left the channel because of a network split.
|
||||
|
||||
Unlike the mechanism described in section 5.2.2 (Channel Delay), in this case, channel names do not become unavailable: these channels may continue to exist after the last user left. Only the user creating the channel becomes "channel creator", users joining an existing empty channel do not automatically become "channel creator" nor "channel operator".
|
||||
|
||||
To ensure the uniqueness of the channel names, the channel identifier created by the server MUST follow specific rules. For more details on this, see section 5.2.1 (Channel Identifier).
|
||||
|
||||
## 4. Channel Modes
|
||||
|
||||
The various modes available for channels are as follows:
|
||||
|
||||
- **O** - give "channel creator" status;
|
||||
- **o** - give/take channel operator privilege;
|
||||
- **v** - give/take the voice privilege;
|
||||
- **a** - toggle the anonymous channel flag;
|
||||
- **i** - toggle the invite-only channel flag;
|
||||
- **m** - toggle the moderated channel;
|
||||
- **n** - toggle the no messages to channel from clients on the outside;
|
||||
- **q** - toggle the quiet channel flag;
|
||||
- **p** - toggle the private channel flag;
|
||||
- **s** - toggle the secret channel flag;
|
||||
- **r** - toggle the server reop channel flag;
|
||||
- **t** - toggle the topic settable by channel operator only flag;
|
||||
- **k** - set/remove the channel key (password);
|
||||
- **l** - set/remove the user limit to channel;
|
||||
- **b** - set/remove ban mask to keep users out;
|
||||
- **e** - set/remove an exception mask to override a ban mask;
|
||||
- **I** - set/remove an invitation mask to automatically override the invite-only flag;
|
||||
|
||||
Unless mentioned otherwise below, all these modes can be manipulated by "channel operators" by using the MODE command defined in "IRC Client Protocol" [IRC-CLIENT].
|
||||
|
||||
### 4.1 Member Status
|
||||
|
||||
The modes in this category take a channel member nickname as argument and affect the privileges given to this user.
|
||||
|
||||
#### 4.1.1 "Channel Creator" Status
|
||||
|
||||
The mode 'O' is only used in conjunction with "safe channels" and SHALL NOT be manipulated by users. Servers use it to give the user creating the channel the status of "channel creator".
|
||||
|
||||
#### 4.1.2 Channel Operator Status
|
||||
|
||||
The mode 'o' is used to toggle the operator status of a channel member.
|
||||
|
||||
#### 4.1.3 Voice Privilege
|
||||
|
||||
The mode 'v' is used to give and take voice privilege to/from a channel member. Users with this privilege can talk on moderated channels. (See section 4.2.3 (Moderated Channel Flag).
|
||||
|
||||
### 4.2 Channel Flags
|
||||
|
||||
The modes in this category are used to define properties which affects how channels operate.
|
||||
|
||||
#### 4.2.1 Anonymous Flag
|
||||
|
||||
The channel flag 'a' defines an anonymous channel. This means that when a message sent to the channel is sent by the server to users, and the origin is a user, then it MUST be masked. To mask the message, the origin is changed to "anonymous!anonymous@anonymous." (e.g., a user with the nickname "anonymous", the username "anonymous" and from a host called "anonymous."). Because of this, servers MUST forbid users from using the nickname "anonymous". Servers MUST also NOT send QUIT messages for users leaving such channels to the other channel members but generate a PART message instead.
|
||||
|
||||
On channels with the character '&' as prefix, this flag MAY be toggled by channel operators, but on channels with the character '!' as prefix, this flag can be set (but SHALL NOT be unset) by the "channel creator" only. This flag MUST NOT be made available on other types of channels.
|
||||
|
||||
Replies to the WHOIS, WHO and NAMES commands MUST NOT reveal the presence of other users on channels for which the anonymous flag is set.
|
||||
|
||||
#### 4.2.2 Invite Only Flag
|
||||
|
||||
When the channel flag 'i' is set, new members are only accepted if their mask matches Invite-list (See section 4.3.2) or they have been invited by a channel operator. This flag also restricts the usage of the INVITE command (See "IRC Client Protocol" [IRC-CLIENT]) to channel operators.
|
||||
|
||||
#### 4.2.3 Moderated Channel Flag
|
||||
|
||||
The channel flag 'm' is used to control who may speak on a channel. When it is set, only channel operators, and members who have been given the voice privilege may send messages to the channel.
|
||||
|
||||
This flag only affects users.
|
||||
|
||||
#### 4.2.4 No Messages To Channel From Clients On The Outside
|
||||
|
||||
When the channel flag 'n' is set, only channel members MAY send messages to the channel.
|
||||
|
||||
This flag only affects users.
|
||||
|
||||
#### 4.2.5 Quiet Channel
|
||||
|
||||
The channel flag 'q' is for use by servers only. When set, it restricts the type of data sent to users about the channel operations: other user joins, parts and nick changes are not sent. From a user's point of view, the channel contains only one user.
|
||||
|
||||
This is typically used to create special local channels on which the server sends notices related to its operations. This was used as a more efficient and flexible way to replace the user mode 's' defined in RFC 1459 [IRC].
|
||||
|
||||
#### 4.2.6 Private and Secret Channels
|
||||
|
||||
The channel flag 'p' is used to mark a channel "private" and the channel flag 's' to mark a channel "secret". Both properties are similar and conceal the existence of the channel from other users.
|
||||
|
||||
This means that there is no way of getting this channel's name from the server without being a member. In other words, these channels MUST be omitted from replies to queries like the WHOIS command.
|
||||
|
||||
When a channel is "secret", in addition to the restriction above, the server will act as if the channel does not exist for queries like the TOPIC, LIST, NAMES commands. Note that there is one exception to this rule: servers will correctly reply to the MODE command. Finally, secret channels are not accounted for in the reply to the LUSERS command (See "Internet Relay Chat: Client Protocol" [IRC-CLIENT]) when the <mask> parameter is specified.
|
||||
|
||||
The channel flags 'p' and 's' MUST NOT both be set at the same time. If a MODE message originating from a server sets the flag 'p' and the flag 's' is already set for the channel, the change is silently ignored. This should only happen during a split healing phase (mentioned in the "IRC Server Protocol" document [IRC-SERVER]).
|
||||
|
||||
#### 4.2.7 Server Reop Flag
|
||||
|
||||
The channel flag 'r' is only available on channels which name begins with the character '!' and MAY only be toggled by the "channel creator".
|
||||
|
||||
This flag is used to prevent a channel from having no channel operator for an extended period of time. When this flag is set, any channel that has lost all its channel operators for longer than the "reop delay" period triggers a mechanism in servers to reop some or all of the channel inhabitants. This mechanism is described more in detail in section 5.2.4 (Channel Reop Mechanism).
|
||||
|
||||
#### 4.2.8 Topic
|
||||
|
||||
The channel flag 't' is used to restrict the usage of the TOPIC command to channel operators.
|
||||
|
||||
#### 4.2.9 User Limit
|
||||
|
||||
A user limit may be set on channels by using the channel flag 'l'. When the limit is reached, servers MUST forbid their local users to join the channel.
|
||||
|
||||
The value of the limit MUST only be made available to the channel members in the reply sent by the server to a MODE query.
|
||||
|
||||
#### 4.2.10 Channel Key
|
||||
|
||||
When a channel key is set (by using the mode 'k'), servers MUST reject their local users request to join the channel unless this key is given.
|
||||
|
||||
The channel key MUST only be made visible to the channel members in the reply sent by the server to a MODE query.
|
||||
|
||||
### 4.3 Channel Access Control
|
||||
|
||||
The last category of modes is used to control access to the channel, they take a mask as argument.
|
||||
|
||||
In order to reduce the size of the global database for control access modes set for channels, servers MAY put a maximum limit on the number of such modes set for a particular channel. If such restriction is imposed, it MUST only affect user requests. The limit SHOULD be homogeneous on a per IRC network basis.
|
||||
|
||||
#### 4.3.1 Channel Ban and Exception
|
||||
|
||||
When a user requests to join a channel, his local server checks if the user's address matches any of the ban masks set for the channel. If a match is found, the user request is denied unless the address also matches an exception mask set for the channel.
|
||||
|
||||
Servers MUST NOT allow a channel member who is banned from the channel to speak on the channel, unless this member is a channel operator or has voice privilege. (See Section 4.1.3 (Voice Privilege)).
|
||||
|
||||
A user who is banned from a channel and who carries an invitation sent by a channel operator is allowed to join the channel.
|
||||
|
||||
#### 4.3.2 Channel Invitation
|
||||
|
||||
For channels which have the invite-only flag set (See Section 4.2.2 (Invite Only Flag)), users whose address matches an invitation mask set for the channel are allowed to join the channel without any invitation.
|
||||
|
||||
## 5. Current Implementations
|
||||
|
||||
The only current implementation of these rules as part of the IRC protocol is the IRC server, version 2.10.
|
||||
|
||||
The rest of this section deals with issues that are mostly of importance to those who wish to implement a server but some parts may also be of interest for client writers.
|
||||
|
||||
### 5.1 Tracking Recently Used Channels
|
||||
|
||||
This mechanism is commonly known as "Channel Delay" and generally only applies to channels which names is prefixed with the character '#' (See Section 3.1 "Standard channels").
|
||||
|
||||
When a network split occurs, servers SHOULD keep track of which channels lost a "channel operator" as the result of the break. These channels are then in a special state which lasts for a certain period of time. In this particular state, the channels cannot cease to exist. If all the channel members leave the channel, the channel becomes unavailable: the server local clients cannot join the channel as long as it is empty.
|
||||
|
||||
Once a channel is unavailable, it will become available again either because a remote user has joined the channel (most likely because the network is healing), or because the delay period has expired (in which case the channel ceases to exist and may be re-created).
|
||||
|
||||
The duration for which a channel death is delayed SHOULD be set considering many factors among which are the size (user wise) of the IRC network, and the usual duration of network splits. It SHOULD be uniform on all servers for a given IRC network.
|
||||
|
||||
### 5.2 Safe Channels
|
||||
|
||||
This document introduces the notion of "safe channels". These channels have a name prefixed with the character '!' and great effort is made to avoid collisions in this name space. Collisions are not impossible, however they are very unlikely.
|
||||
|
||||
#### 5.2.1 Channel Identifier
|
||||
|
||||
The channel identifier is a function of the time. The current time (as defined under UNIX by the number of seconds elapsed since 00:00:00 GMT, January 1, 1970) is converted in a string of five (5) characters using the following base: "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" (each character has a decimal value starting from 0 for 'A' to 35 for '0').
|
||||
|
||||
The channel identifier therefore has a periodicity of 36^5 seconds (about 700 days).
|
||||
|
||||
#### 5.2.2 Channel Delay
|
||||
|
||||
These channels MUST be subject to the "channel delay" mechanism described in section 5.1 (Channel Delay). However, the mechanism is slightly adapted to fit better.
|
||||
|
||||
Servers MUST keep track of all such channels which lose members as the result of a network split, no matter whether the user is a "channel operator" or not.
|
||||
|
||||
However, these channels do NOT ever become unavailable, it is always possible to join them even when they are empty.
|
||||
|
||||
#### 5.2.3 Abuse Window
|
||||
|
||||
Because the periodicity is so long, attacks on a particular channel (name) may only occur once in a very long while. However, with luck and patience, it is still possible for a user to cause a channel collision. In order to avoid this, servers MUST "look in the future" and keep a list of channel names which identifier is about to be used (in the coming few days for example). Such list should remain small, not be a burden for servers to maintain and be used to avoid channel collisions by preventing the re-creation of such channel for a longer period of time than channel delay does.
|
||||
|
||||
Eventually a server MAY choose to extend this procedure to forbid creation of channels with the same shortname only (then ignoring the channel identifier).
|
||||
|
||||
#### 5.2.4 Preserving Sanity In The Name Space
|
||||
|
||||
The combination of the mechanisms described in sections 5.2.2 and 5.2.3 makes it quite difficult for a user to create a channel collision. However, another type of abuse consists of creating many channels having the same shortname, but different identifiers. To prevent this from happening, servers MUST forbid the creation of a new channel which has the same shortname of a channel currently existing.
|
||||
|
||||
#### 5.2.5 Server Reop Mechanism
|
||||
|
||||
When a channel has been opless for longer than the "reop delay" period and has the channel flag 'r' set (See Section 4.2.7 (Server Reop Flag)), IRC servers are responsible for giving the channel operator status randomly to some of the members.
|
||||
|
||||
The exact logic used for this mechanism by the current implementation is described below. Servers MAY use a different logic, but that it is strongly RECOMMENDED that all servers use the same logic on a particular IRC network to maintain coherence as well as fairness. For the same reason, the "reop delay" SHOULD be uniform on all servers for a given IRC network. As for the "channel delay", the value of the "reop delay" SHOULD be set considering many factors among which are the size (user wise) of the IRC network, and the usual duration of network splits.
|
||||
|
||||
**a)** the reop mechanism is triggered after a random time following the expiration of the "reop delay". This should limit the eventuality of the mechanism being triggered at the same time (for the same channel) on two separate servers.
|
||||
|
||||
**b)** If the channel is small (five (5) users or less), and the "channel delay" for this channel has expired, then reop all channel members if at least one member is local to the server.
|
||||
|
||||
**c)** If the channel is small (five (5) users or less), and the "channel delay" for this channel has expired, and the "reop delay" has expired for longer than its value, then reop all channel members.
|
||||
|
||||
**d)** For other cases, reop at most one member on the channel, based on some method build into the server. If you don't reop a member, the method should be such that another server will probably op someone. The method SHOULD be the same over the whole network. A good heuristic could be just random reop. (The current implementation actually tries to choose a member local to the server who has not been idle for too long, eventually postponing action, therefore letting other servers have a chance to find a "not too idle" member. This is over complicated due to the fact that servers only know the "idle" time of their local users)
|
||||
|
||||
## 6. Current Problems
|
||||
|
||||
There are a number of recognized problems with the way IRC channels are managed. Some of these can be directly attributed to the rules defined in this document, while others are the result of the underlying "IRC Server Protocol" [IRC-SERVER]. Although derived from RFC 1459 [IRC], this document introduces several novelties in an attempt to solve some of the known problems.
|
||||
|
||||
### 6.1 Labels
|
||||
|
||||
This document defines one of the many labels used by the IRC protocol. Although there are several distinct namespaces (based on the channel name prefix), duplicates inside each of these are not allowed. Currently, it is possible for users on different servers to pick the label which may result in collisions (with the exception of channels known to only one server where they can be averted).
|
||||
|
||||
#### 6.1.1 Channel Delay
|
||||
|
||||
The channel delay mechanism described in section 5.1 (Tracking Recently Used Channels) and used for channels prefixed with the character '#' is a simple attempt at preventing collisions from happening. Experience has shown that, under normal circumstances, it is very efficient; however, it obviously has severe limitations keeping it from being an adequate solution to the problem discussed here.
|
||||
|
||||
#### 6.1.2 Safe Channels
|
||||
|
||||
"Safe channels" described in section 3.2 (Safe Channels) are a better way to prevent collisions from happening as it prevents users from having total control over the label they choose. The obvious drawback for such labels is that they are not user friendly. However, it is fairly trivial for a client program to improve on this.
|
||||
|
||||
### 6.2 Mode Propagation Delays
|
||||
|
||||
Because of network delays induced by the network, and because each server on the path is REQUIRED to check the validity of mode changes (e.g., user exists and has the right privileges), it is not unusual for a MODE message to only affect part of the network, often creating a discrepancy between servers on the current state of a channel.
|
||||
|
||||
While this may seem easy to fix (by having only the original server check the validity of mode changes), it was decided not to do so for various reasons. One concern is that servers cannot trust each other, and that a misbehaving servers can easily be detected. This way of doing so also stops wave effects on channels which are out of synch when mode changes are issued from different directions.
|
||||
|
||||
### 6.3 Collisions And Channel Modes
|
||||
|
||||
The "Internet Relay Chat: Server Protocol" document [IRC-SERVER] describes how channel data is exchanged when two servers connect to each other. Channel collisions (either legitimate or not) are treated as inclusive events, meaning that the resulting channel has for members all the users who are members of the channel on either server prior to the connection.
|
||||
|
||||
Similarly, each server sends the channel modes to the other one. Therefore, each server also receives these channel modes. There are three types of modes for a given channel: flags, masks, and data. The first two types are easy to deal with as they are either set or unset. If such a mode is set on one server, it MUST be set on the other server as a result of the connection.
|
||||
|
||||
As topics are not sent as part of this exchange, they are not a problem. However, channel modes 'l' and 'k' are exchanged, and if they are set on both servers prior to the connection, there is no mechanism to decide which of the two values takes precedence. It is left up to the users to fix the resulting discrepancy.
|
||||
|
||||
### 6.4 Resource Exhaustion
|
||||
|
||||
The mode based on masks defined in section 4.3 make the IRC servers (and network) vulnerable to a simple abuse of the system: a single channel operator can set as many different masks as possible on a particular channel. This can easily cause the server to waste memory, as well as network bandwidth (since the info is propagated to other servers). For this reason it is RECOMMENDED that a limit be put on the number of such masks per channels as mentioned in section 4.3.
|
||||
|
||||
Moreover, more complex mechanisms MAY be used to avoid having redundant masks set for the same channel.
|
||||
|
||||
## 7. Security Considerations
|
||||
|
||||
### 7.1 Access Control
|
||||
|
||||
One of the main ways to control access to a channel is to use masks which are based on the username and hostname of the user connections. This mechanism can only be efficient and safe if the IRC servers have an accurate way of authenticating user connections, and if users cannot easily get around it. While it is in theory possible to implement such a strict authentication mechanism, most IRC networks (especially public networks) do not have anything like this in place and provide little guaranty about the accuracy of the username and hostname for a particular client connection.
|
||||
|
||||
Another way to control access is to use a channel key, but since this key is sent in plaintext, it is vulnerable to traditional man in the middle attacks.
|
||||
|
||||
### 7.2 Channel Privacy
|
||||
|
||||
Because channel collisions are treated as inclusive events (See Section 6.3), it is possible for users to join a channel overriding its access control settings. This method has long been used by individuals to "take over" channels by "illegitimately" gaining channel operator status on the channel. The same method can be used to find out the exact list of members of a channel, as well as to eventually receive some of the messages sent to the channel.
|
||||
|
||||
### 7.3 Anonymity
|
||||
|
||||
The anonymous channel flag (See Section 4.2.1) can be used to render all users on such channel "anonymous" by presenting all messages to the channel as originating from a pseudo user which nickname is "anonymous". This is done at the client-server level, and no anonymity is provided at the server-server level.
|
||||
|
||||
It should be obvious to readers, that the level of anonymity offered is quite poor and insecure, and that clients SHOULD display strong warnings for users joining such channels.
|
||||
|
||||
## 8. Current Support and Availability
|
||||
|
||||
**Mailing lists for IRC related discussion:**
|
||||
- General discussion: ircd-users@irc.org
|
||||
- Protocol development: ircd-dev@irc.org
|
||||
|
||||
**Software implementations:**
|
||||
- ftp://ftp.irc.org/irc/server
|
||||
- ftp://ftp.funet.fi/pub/unix/irc
|
||||
- ftp://coombs.anu.edu.au/pub/irc
|
||||
|
||||
**Newsgroup:** alt.irc
|
||||
|
||||
## 9. Acknowledgements
|
||||
|
||||
Parts of this document were copied from the RFC 1459 [IRC] which first formally documented the IRC Protocol. It has also benefited from many rounds of review and comments. In particular, the following people have made significant contributions to this document:
|
||||
|
||||
Matthew Green, Michael Neumayer, Volker Paulsen, Kurt Roeckx, Vesa Ruokonen, Magnus Tjernstrom, Stefan Zehl.
|
||||
|
||||
## 10. References
|
||||
|
||||
**[KEYWORDS]** Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||||
|
||||
**[IRC]** Oikarinen, J. and D. Reed, "Internet Relay Chat Protocol", RFC 1459, May 1993.
|
||||
|
||||
**[IRC-ARCH]** Kalt, C., "Internet Relay Chat: Architecture", RFC 2810, April 2000.
|
||||
|
||||
**[IRC-CLIENT]** Kalt, C., "Internet Relay Chat: Client Protocol", RFC 2812, April 2000.
|
||||
|
||||
**[IRC-SERVER]** Kalt, C., "Internet Relay Chat: Server Protocol", RFC 2813, April 2000.
|
||||
|
||||
## 11. Author's Address
|
||||
|
||||
Christophe Kalt
|
||||
99 Teaneck Rd, Apt #117
|
||||
Ridgefield Park, NJ 07660
|
||||
USA
|
||||
|
||||
EMail: kalt@stealth.net
|
||||
|
||||
## 12. Full Copyright Statement
|
||||
|
||||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||||
|
||||
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
|
||||
|
||||
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
|
||||
|
||||
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
### Acknowledgement
|
||||
|
||||
Funding for the RFC Editor function is currently provided by the Internet Society.
|
||||
2432
wiki/RFC2812.md
Normal file
2432
wiki/RFC2812.md
Normal file
File diff suppressed because it is too large
Load Diff
627
wiki/RFC2813.md
Normal file
627
wiki/RFC2813.md
Normal file
@@ -0,0 +1,627 @@
|
||||
# RFC 2813 - Internet Relay Chat: Server Protocol
|
||||
|
||||
**Network Working Group:** C. Kalt
|
||||
**Request for Comments:** 2813
|
||||
**Updates:** 1459
|
||||
**Category:** Informational
|
||||
**Date:** April 2000
|
||||
|
||||
## Status of this Memo
|
||||
|
||||
This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.
|
||||
|
||||
## Copyright Notice
|
||||
|
||||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||||
|
||||
## Abstract
|
||||
|
||||
While based on the client-server model, the IRC (Internet Relay Chat) protocol allows servers to connect to each other effectively forming a network.
|
||||
|
||||
This document defines the protocol used by servers to talk to each other. It was originally a superset of the client protocol but has evolved differently.
|
||||
|
||||
First formally documented in May 1993 as part of RFC 1459 [IRC], most of the changes brought since then can be found in this document as development was focused on making the protocol scale better. Better scalability has allowed existing world-wide networks to keep growing and reach sizes which defy the old specification.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [1. Introduction](#1-introduction)
|
||||
- [2. Global database](#2-global-database)
|
||||
- [2.1 Servers](#21-servers)
|
||||
- [2.2 Clients](#22-clients)
|
||||
- [2.2.1 Users](#221-users)
|
||||
- [2.2.2 Services](#222-services)
|
||||
- [2.3 Channels](#23-channels)
|
||||
- [3. The IRC Server Specification](#3-the-irc-server-specification)
|
||||
- [3.1 Overview](#31-overview)
|
||||
- [3.2 Character codes](#32-character-codes)
|
||||
- [3.3 Messages](#33-messages)
|
||||
- [3.3.1 Message format in Augmented BNF](#331-message-format-in-augmented-bnf)
|
||||
- [3.4 Numeric replies](#34-numeric-replies)
|
||||
- [4. Message Details](#4-message-details)
|
||||
- [4.1 Connection Registration](#41-connection-registration)
|
||||
- [4.1.1 Password message](#411-password-message)
|
||||
- [4.1.2 Server message](#412-server-message)
|
||||
- [4.1.3 Nick](#413-nick)
|
||||
- [4.1.4 Service message](#414-service-message)
|
||||
- [4.1.5 Quit](#415-quit)
|
||||
- [4.1.6 Server quit message](#416-server-quit-message)
|
||||
- [4.2 Channel operations](#42-channel-operations)
|
||||
- [4.2.1 Join message](#421-join-message)
|
||||
- [4.2.2 Njoin message](#422-njoin-message)
|
||||
- [4.2.3 Mode message](#423-mode-message)
|
||||
- [5. Implementation details](#5-implementation-details)
|
||||
- [5.1 Connection 'Liveness'](#51-connection-liveness)
|
||||
- [5.2 Accepting a client to server connection](#52-accepting-a-client-to-server-connection)
|
||||
- [5.2.1 Users](#521-users)
|
||||
- [5.2.2 Services](#522-services)
|
||||
- [5.3 Establishing a server-server connection](#53-establishing-a-server-server-connection)
|
||||
- [5.3.1 Link options](#531-link-options)
|
||||
- [5.3.1.1 Compressed server to server links](#5311-compressed-server-to-server-links)
|
||||
- [5.3.1.2 Anti abuse protections](#5312-anti-abuse-protections)
|
||||
- [5.3.2 State information exchange when connecting](#532-state-information-exchange-when-connecting)
|
||||
- [5.4 Terminating server-client connections](#54-terminating-server-client-connections)
|
||||
- [5.5 Terminating server-server connections](#55-terminating-server-server-connections)
|
||||
- [5.6 Tracking nickname changes](#56-tracking-nickname-changes)
|
||||
- [5.7 Tracking recently used nicknames](#57-tracking-recently-used-nicknames)
|
||||
- [5.8 Flood control of clients](#58-flood-control-of-clients)
|
||||
- [5.9 Non blocking lookups](#59-non-blocking-lookups)
|
||||
- [5.9.1 Hostname (DNS) lookups](#591-hostname-dns-lookups)
|
||||
- [5.9.2 Username (Ident) lookups](#592-username-ident-lookups)
|
||||
- [5.10 Configuration File](#510-configuration-file)
|
||||
- [5.11 Channel Membership](#511-channel-membership)
|
||||
- [6. Current problems](#6-current-problems)
|
||||
- [6.1 Scalability](#61-scalability)
|
||||
- [6.2 Labels](#62-labels)
|
||||
- [6.2.1 Nicknames](#621-nicknames)
|
||||
- [6.2.2 Channels](#622-channels)
|
||||
- [6.2.3 Servers](#623-servers)
|
||||
- [6.3 Algorithms](#63-algorithms)
|
||||
- [7. Security Considerations](#7-security-considerations)
|
||||
- [7.1 Authentication](#71-authentication)
|
||||
- [7.2 Connection Hijacking](#72-connection-hijacking)
|
||||
- [7.3 Denial of Service](#73-denial-of-service)
|
||||
- [7.4 Channel Takeover](#74-channel-takeover)
|
||||
- [8. Current support and availability](#8-current-support-and-availability)
|
||||
- [9. Acknowledgements](#9-acknowledgements)
|
||||
- [10. References](#10-references)
|
||||
- [11. Author's Address](#11-authors-address)
|
||||
- [12. Full Copyright Statement](#12-full-copyright-statement)
|
||||
|
||||
|
||||
## 1. Introduction
|
||||
|
||||
The IRC protocol was developed since 1989. Although it has remained mostly compatible with the 2.10 implementation, some issues had to be addressed in order to let the protocol scale properly. This document aims at providing a reference for the server to server protocol of the current implementation. Changes to the client to server protocol are minor.
|
||||
|
||||
This document is mainly intended for server implementors.
|
||||
|
||||
The IRC (Internet Relay Chat) protocol has been designed over a number of years, with multitudinous implementations and increasing complexity. While based on a client-server model, there are a vast number of design decisions and implementation choices that determine the overall behavior and scalability of any given IRC network.
|
||||
|
||||
RFC 1459 [IRC] has been the sole formal specification of IRC protocol for many years. As implementations evolved, it was shown that the protocol described in RFC 1459 has serious weaknesses and deficiencies. This document attempts to provide documentation for the working protocol used by the majority of IRC servers connected to what is sometimes referred to as the "IRC network".
|
||||
|
||||
## 2. Global database
|
||||
|
||||
IRC servers SHALL maintain the following database about the state of the whole network:
|
||||
- a list of all servers;
|
||||
- a list of all users;
|
||||
- a list of all channels.
|
||||
|
||||
Each server MUST keep the database synchronized with the rest of the network. It is important to note here that the messages used to maintain the database synchronized are ONLY passed server-to-server.
|
||||
|
||||
### 2.1 Servers
|
||||
|
||||
Each server MUST know about all other servers on the network. Each server is identified by its name which has a maximum length of sixty three (63) characters. It is RECOMMENDED that the server name be chosen as the DNS name of the host on which the server runs.
|
||||
|
||||
### 2.2 Clients
|
||||
|
||||
For each client, servers MUST keep the following information:
|
||||
- a nickname (See "IRC Client Protocol" [IRC-CLIENT]);
|
||||
- a username (as provided by the USER command) (See [IRC-CLIENT]);
|
||||
- a hostname (as determined by the server);
|
||||
- a servername (which server the client is connected to);
|
||||
- the realname or "GECOS" (as provided by USER command) (See [IRC-CLIENT]);
|
||||
- any user modes (defined in [IRC-CLIENT]).
|
||||
|
||||
#### 2.2.1 Users
|
||||
|
||||
Users are clients which have registered with the server. They are distinguished from other connections which have not successfully registered (such as clients still performing authentication).
|
||||
|
||||
#### 2.2.2 Services
|
||||
|
||||
Services are special kind of clients. They are introduced to the network and can send messages. However, they MUST NOT be the target of commands sent by users (such as MODE, KICK, etc.).
|
||||
|
||||
### 2.3 Channels
|
||||
|
||||
Channels are groups of one or more clients. Messages sent to a channel are received by all clients which are members of that channel.
|
||||
|
||||
Details on channels are covered in "Internet Relay Chat: Channel Management" [IRC-CHAN].
|
||||
|
||||
For each channel, the server MUST keep the following information:
|
||||
- the channel name;
|
||||
- the current members;
|
||||
- the channel modes.
|
||||
|
||||
It is to be noted here that various servers MAY store additional (local) state information for each channel, such as local bans, local exceptions, etc.
|
||||
|
||||
## 3. The IRC Server Specification
|
||||
|
||||
### 3.1 Overview
|
||||
|
||||
The protocol as described herein is for use with server to server connections.
|
||||
|
||||
### 3.2 Character codes
|
||||
|
||||
No specific character set is specified. The protocol is based on a set of codes which are composed of eight (8) bits, making up an octet. Each message may be composed of any number of these octets; however, some octet values are used for control codes, which act as message delimiters.
|
||||
|
||||
Regardless of being an 8-bit protocol, the delimiters and keywords are such that protocol is mostly usable from US-ASCII terminal and a telnet connection.
|
||||
|
||||
Because of IRC's Scandinavian origin, the characters `{}|^` are considered to be the lower case equivalents of the characters `[]\~`, respectively. This is a critical issue when determining the equivalence of two nicknames or channel names.
|
||||
|
||||
### 3.3 Messages
|
||||
|
||||
Servers and clients send each other messages, which may or may not generate a reply. If the message contains a valid command, as described in later sections, the client should expect a reply as specified but it is not advised to wait forever for the reply; client to server and server to server communication is essentially asynchronous by nature.
|
||||
|
||||
Each IRC message may consist of up to three main parts: the prefix (OPTIONAL), the command, and the command parameters (maximum of fifteen (15)). The prefix, command, and all parameters are separated by one ASCII space character (0x20) each.
|
||||
|
||||
The presence of a prefix is indicated with a single leading ASCII colon character (':', 0x3b), which MUST be the first character of the message itself. There MUST be NO gap (whitespace) between the colon and the prefix. The prefix is used by servers to indicate the true origin of the message.
|
||||
|
||||
The command MUST either be a valid IRC command or a three (3) digit number represented in ASCII text.
|
||||
|
||||
IRC messages are always lines of characters terminated with a CR-LF (Carriage Return - Line Feed) pair, and these messages SHALL NOT exceed 512 characters in length, counting all characters including the trailing CR-LF. Thus, there are 510 characters maximum allowed for the command and its parameters. There is no provision for continuation of message lines.
|
||||
|
||||
#### 3.3.1 Message format in Augmented BNF
|
||||
|
||||
The protocol messages must be extracted from the contiguous stream of octets. The current solution is to designate two characters, CR and LF, as message separators. Empty messages are silently ignored, which permits use of the sequence CR-LF between messages without extra problems.
|
||||
|
||||
The extracted message is parsed into the components <prefix>, <command> and list of parameters (<params>).
|
||||
|
||||
The Augmented BNF representation for this is found in [IRC-CLIENT]. In addition to the client to server messages, the following messages are available for server to server communication.
|
||||
|
||||
### 3.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. Refer to [IRC-CLIENT] for more information on numeric replies.
|
||||
|
||||
## 4. Message Details
|
||||
|
||||
On the following pages are descriptions of each server to server message recognized by the IRC server. Server to client messages are described in [IRC-CLIENT].
|
||||
|
||||
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.
|
||||
|
||||
### 4.1 Connection Registration
|
||||
|
||||
The commands described here are used to register a connection with another IRC server.
|
||||
|
||||
#### 4.1.1 Password message
|
||||
|
||||
**Command:** PASS
|
||||
**Parameters:** <password> <version> <flags> [<options>]
|
||||
|
||||
The PASS command is used to set a 'connection password'. The password supplied MUST match the one contained in the C/N lines (for servers) or I lines (for clients). It is possible to send multiple PASS commands before registering but only the last one sent is used for verification and it may not be changed once registered.
|
||||
|
||||
The <version> parameter consists of two substrings separated by one (1) dot ('.'), the leftmost being the generation and the rightmost being the server version number.
|
||||
|
||||
The optional <flags> parameter is a string of characters representing server flags (see below).
|
||||
|
||||
The optional <options> parameter is a list of space separated string options.
|
||||
|
||||
**Numeric Replies:** ERR_NEEDMOREPARAMS, ERR_ALREADYREGISTRED
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
PASS secretpasswordhere 0210 IRC|aBgH
|
||||
```
|
||||
|
||||
#### 4.1.2 Server message
|
||||
|
||||
**Command:** SERVER
|
||||
**Parameters:** <servername> <hopcount> <info>
|
||||
|
||||
The SERVER message is used to tell a server that the other end of a new connection is a server. This message is also used to pass server data over whole net.
|
||||
|
||||
When a new server connection is established, each side sends SERVER and PASS messages to the other side. The SERVER message carries information about the sending server. If the information is acceptable, the other side responds with its own SERVER and PASS messages otherwise it should close the connection.
|
||||
|
||||
When the SERVER command is received, a server SHOULD check that it is authenticated. This can be done various ways, the most common being:
|
||||
- the hostname of the server matches the server's host configuration;
|
||||
- the password provided by the server with the PASS command matches the expected password.
|
||||
|
||||
The <hopcount> parameter is used by servers to indicate how far away the introduced server is. When sending SERVER, servers MUST set the <hopcount> to 1. When relaying SERVER, servers MUST increment the <hopcount> by 1.
|
||||
|
||||
The <info> parameter contains information about the server, and is displayed by various commands. It may include network name, city, owner, etc.
|
||||
|
||||
**Numeric Replies:**
|
||||
- ERR_ALREADYREGISTRED
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
SERVER tolsun.oulu.fi 1 :Experimental server
|
||||
|
||||
:tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Central Server
|
||||
```
|
||||
|
||||
#### 4.1.3 Nick
|
||||
|
||||
**Command:** NICK
|
||||
**Parameters:** <nickname> <hopcount> <username> <host> <servertoken> <umode> <realname>
|
||||
|
||||
The NICK message is used by servers to inform other servers about new users. This is also how servers transmit nickname changes.
|
||||
|
||||
The NICK message MUST be sent to all servers that need to know about the user. Each parameter has the same meaning as in the USER and MODE commands (See [IRC-CLIENT]).
|
||||
|
||||
For newly introduced clients, the <hopcount> SHALL be set to 1. When propagating NICK to other servers, <hopcount> MUST be incremented by 1 for each hop.
|
||||
|
||||
**Numeric Replies:** None for servers
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
:csd.bu.edu NICK WiZ 7 ~john csd.bu.edu 1 +i :John Doe
|
||||
|
||||
NICK syrk 1 kalt millennium.stealth.net tolsun.oulu.fi 0 :Christophe Kalt
|
||||
```
|
||||
|
||||
#### 4.1.4 Service message
|
||||
|
||||
**Command:** SERVICE
|
||||
**Parameters:** <servicename> <servertoken> <distribution> <type> <hopcount> <info>
|
||||
|
||||
The SERVICE command is used by servers to introduce a service to the rest of the network. The meaning of the parameters is the same as in the SERVICE client command (See [IRC-CLIENT]).
|
||||
|
||||
**Numeric Replies:** None for servers
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
SERVICE dict * *.fr 0 0 :French Dictionary
|
||||
```
|
||||
|
||||
#### 4.1.5 Quit
|
||||
|
||||
**Command:** QUIT
|
||||
**Parameters:** <comment>
|
||||
|
||||
A client session is ended with a quit message. The server MUST send the quit message to all servers to which it is directly connected, which then MUST broadcast it to all clients which have common channels with the quitting client.
|
||||
|
||||
When a server connection is closed, a QUIT message is generated for each client connected only to that server.
|
||||
|
||||
**Numeric Replies:** None
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
:WiZ QUIT :Gone to have lunch
|
||||
|
||||
:tolsun.oulu.fi QUIT :Bad link
|
||||
```
|
||||
|
||||
#### 4.1.6 Server quit message
|
||||
|
||||
**Command:** SQUIT
|
||||
**Parameters:** <server> <comment>
|
||||
|
||||
The SQUIT message is needed to tell about quitting or dead servers. If a server wishes to break the connection to another server it MUST send a SQUIT message to the other server, using the name of the other server as the server parameter.
|
||||
|
||||
When a server link is closed, a SQUIT message is broadcast to the network. Each server that receives it removes from its database all servers and users that were connected through the server that was removed from the network.
|
||||
|
||||
**Numeric Replies:** None for servers
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
SQUIT tolsun.oulu.fi :Bad Link
|
||||
|
||||
:csd.bu.edu SQUIT bar.foo.com :Link inactive
|
||||
```
|
||||
|
||||
### 4.2 Channel operations
|
||||
|
||||
These messages are used by servers to distribute channel information.
|
||||
|
||||
#### 4.2.1 Join message
|
||||
|
||||
**Command:** JOIN
|
||||
**Parameters:** <channel>
|
||||
|
||||
The JOIN command is used by servers to tell other servers that a user is now a member of a particular channel. When a user joins a channel, the server generates a JOIN message for that channel and sends it to all servers.
|
||||
|
||||
**Numeric Replies:** None for servers
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
:WiZ JOIN #Twilight_zone
|
||||
```
|
||||
|
||||
#### 4.2.2 Njoin message
|
||||
|
||||
**Command:** NJOIN
|
||||
**Parameters:** <channel> <nicknames>
|
||||
|
||||
The NJOIN message is used between servers only. It is used to efficiently distribute a whole list of users that have joined a channel (for example, after a netjoin) instead of a series of JOIN messages.
|
||||
|
||||
The <nicknames> parameter is a list of nicknames, with their channel status indicated by a prefix character. The characters are:
|
||||
- `@` indicates channel operator status;
|
||||
- `+` indicates voice privilege;
|
||||
- No prefix indicates normal channel member.
|
||||
|
||||
**Numeric Replies:** None for servers
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
:services.fr NJOIN #welcome :@WiZ,+guest,user1,user2
|
||||
|
||||
NJOIN #test :@Alice,+Bob,Charlie
|
||||
```
|
||||
|
||||
#### 4.2.3 Mode message
|
||||
|
||||
**Command:** MODE
|
||||
**Parameters:** <channel/nick> <mode> [<mode parameters>]
|
||||
|
||||
The MODE command is a dual-purpose command in IRC. It allows both channel modes and user modes to be changed. When used with a channel name, it changes channel modes; when used with a nickname, it changes user modes.
|
||||
|
||||
MODE messages between servers are used to distribute channel and user mode changes throughout the network.
|
||||
|
||||
**Numeric Replies:** None for servers
|
||||
|
||||
**Example:**
|
||||
|
||||
```
|
||||
:WiZ MODE #Fins +o Kilroy
|
||||
|
||||
:csd.bu.edu MODE WiZ +iw
|
||||
|
||||
:WiZ MODE #eu-opers +l 10
|
||||
```
|
||||
|
||||
## 5. Implementation details
|
||||
|
||||
This section deals with the various implementation problems and choices for IRC servers.
|
||||
|
||||
### 5.1 Connection 'Liveness'
|
||||
|
||||
It is important for servers to be able to check if the other end of the connection is alive. For this purpose, the server SHALL send PING messages at regular intervals (typical value is 90 seconds) to all of its neighbors. Every connection which has not shown any activity (i.e., neither sending nor receiving any data) for 2*ping_frequency MUST be dropped.
|
||||
|
||||
When a server receives a PING message, it MUST reply with an appropriate PONG message.
|
||||
|
||||
### 5.2 Accepting a client to server connection
|
||||
|
||||
When a new client connects to a server, the server SHALL begin the authentication process to verify whether the connection is from a legitimate user or from another server.
|
||||
|
||||
#### 5.2.1 Users
|
||||
|
||||
For a connection to be accepted as a user connection, it MUST provide a password (if required) and complete the registration sequence with USER and NICK commands. The server SHOULD also perform hostname and ident lookups.
|
||||
|
||||
#### 5.2.2 Services
|
||||
|
||||
Services are a special type of client. They are introduced to the network and can send messages. They have limited interaction with normal users and channels. The SERVICE command is used to register a service.
|
||||
|
||||
### 5.3 Establishing a server-server connection
|
||||
|
||||
When two servers connect, they MUST exchange PASS and SERVER messages. A server SHOULD NOT send any other information until this is done.
|
||||
|
||||
#### 5.3.1 Link options
|
||||
|
||||
##### 5.3.1.1 Compressed server to server links
|
||||
|
||||
To reduce the amount of bandwidth used by server to server links, servers MAY compress the data stream. This is typically implemented using the zlib compression library.
|
||||
|
||||
##### 5.3.1.2 Anti abuse protections
|
||||
|
||||
Servers MAY implement various anti-abuse protections to limit the impact of abusive servers on the network. This can include rate limiting, filtering, etc.
|
||||
|
||||
#### 5.3.2 State information exchange when connecting
|
||||
|
||||
When a new server-to-server connection is established, each side must inform the other about the state of the network as it sees it. This is done by sending:
|
||||
- SERVER messages for all known servers;
|
||||
- NICK messages for all known users;
|
||||
- SERVICE messages for all known services;
|
||||
- Information about channel states.
|
||||
|
||||
### 5.4 Terminating server-client connections
|
||||
|
||||
When terminating a server-client connection, the server MUST send a QUIT message for that client to all servers, which will in turn propagate it to their clients that shared channels with the quitting client.
|
||||
|
||||
### 5.5 Terminating server-server connections
|
||||
|
||||
When a server connection is terminated, the server MUST send a SQUIT message for the removed server to all its neighbors. Those servers will then remove from their database all servers and clients that were connected through the broken link.
|
||||
|
||||
### 5.6 Tracking nickname changes
|
||||
|
||||
When a client changes nickname, the server MUST send a NICK message to all other servers. This ensures that the nickname change is propagated throughout the network and that all servers update their database.
|
||||
|
||||
### 5.7 Tracking recently used nicknames
|
||||
|
||||
To prevent nickname collisions and abuse, servers SHOULD keep track of recently used nicknames and make them unavailable for a short period after they are released. This is particularly important after a netspli
|
||||
|
||||
t where multiple users might try to grab the same nickname.
|
||||
|
||||
### 5.8 Flood control of clients
|
||||
|
||||
Servers SHOULD implement flood protection to prevent clients from sending too many commands too quickly. This helps protect the server and network from abuse.
|
||||
|
||||
Typical implementations use a "token bucket" algorithm or similar approach to rate-limit commands from clients.
|
||||
|
||||
### 5.9 Non blocking lookups
|
||||
|
||||
To avoid blocking the server while performing hostname and ident lookups, these lookups SHOULD be performed asynchronously.
|
||||
|
||||
#### 5.9.1 Hostname (DNS) lookups
|
||||
|
||||
When a client connects, the server SHOULD perform a DNS lookup on the client's IP address to determine the hostname. This lookup SHOULD be done asynchronously to avoid blocking the server.
|
||||
|
||||
#### 5.9.2 Username (Ident) lookups
|
||||
|
||||
In addition to DNS lookups, servers MAY perform ident lookups (RFC 1413) to verify the username of connecting clients. Like DNS lookups, these SHOULD be done asynchronously.
|
||||
|
||||
### 5.10 Configuration File
|
||||
|
||||
Servers typically use configuration files to determine:
|
||||
- What servers they are allowed to connect to;
|
||||
- What clients are allowed to connect;
|
||||
- Operator passwords;
|
||||
- Connection classes and limits;
|
||||
- Channel and user modes available;
|
||||
- etc.
|
||||
|
||||
The exact format and options of configuration files are implementation-specific.
|
||||
|
||||
### 5.11 Channel Membership
|
||||
|
||||
Servers MUST track which clients are members of which channels. This information is essential for:
|
||||
- Distributing channel messages to the correct recipients;
|
||||
- Enforcing channel modes;
|
||||
- Handling channel operations like kicks and bans.
|
||||
|
||||
|
||||
## 6. Current problems
|
||||
|
||||
There are a number of recognized problems with the IRC Server Protocol, this section addresses the problems related to the architecture of the protocol.
|
||||
|
||||
### 6.1 Scalability
|
||||
|
||||
It is widely recognized that this protocol does not scale sufficiently well when used in a large arena. The main problem comes from the requirement that all servers know about all other servers, clients and channels and that information regarding them be updated as soon as it changes.
|
||||
|
||||
While this issue is also present in the architecture (See [IRC-ARCH]), it is compounded by the protocol itself which doesn't provide for more sophisticated routing. Servers need to broadcast most messages to all other servers.
|
||||
|
||||
### 6.2 Labels
|
||||
|
||||
#### 6.2.1 Nicknames
|
||||
|
||||
The issue of nicknames is discussed in [IRC-CLIENT].
|
||||
|
||||
With the current protocol, it is possible for two clients to pick the same nickname at the same time on different servers (nick collision). The protocol provides a way to detect and solve such conflicts but it remains a problem.
|
||||
|
||||
While the protocol allows for collision detection and resolution through KILL messages, this mechanism has serious weaknesses and deficiencies.
|
||||
|
||||
#### 6.2.2 Channels
|
||||
|
||||
Channel names suffer from the same issue as nicknames. When two channels with the same name are created on different servers (channel collision), the protocol has to deal with merging them.
|
||||
|
||||
The current protocol handles channel collisions as inclusive events: all users from both channels become members of the resulting channel. This can lead to various problems, especially with channel modes and privileges.
|
||||
|
||||
#### 6.2.3 Servers
|
||||
|
||||
Server names are currently required to be unique across the entire network. While this is generally not a problem (as server names typically use DNS hostnames), it can become an issue when servers need to be renamed or when experimental servers are connected.
|
||||
|
||||
The protocol does not provide any mechanism to handle server name collisions; a server is expected to disconnect if it detects a name collision.
|
||||
|
||||
### 6.3 Algorithms
|
||||
|
||||
The core routing algorithm is simple: most messages are broadcast to all servers. While this ensures that all servers receive all updates, it has severe scalability limitations.
|
||||
|
||||
More sophisticated routing algorithms would be required to scale to larger networks, but implementing such algorithms while maintaining backward compatibility is extremely difficult.
|
||||
|
||||
## 7. Security Considerations
|
||||
|
||||
### 7.1 Authentication
|
||||
|
||||
Server to server connections rely on a simple password authentication mechanism. This is vulnerable to various attacks:
|
||||
- Passwords are often transmitted in clear text;
|
||||
- There is no protection against replay attacks;
|
||||
- Compromised passwords grant full access to the network.
|
||||
|
||||
More sophisticated authentication mechanisms (such as public key cryptography) would provide better security.
|
||||
|
||||
### 7.2 Connection Hijacking
|
||||
|
||||
The protocol does not provide any protection against connection hijacking. If an attacker can inject or modify packets in a server-to-server connection, they can:
|
||||
- Introduce fake servers, clients, or services;
|
||||
- Modify channel modes and privileges;
|
||||
- Send messages on behalf of other users.
|
||||
|
||||
Using encrypted connections (such as TLS/SSL) would help mitigate this risk.
|
||||
|
||||
### 7.3 Denial of Service
|
||||
|
||||
The IRC protocol is vulnerable to various denial of service attacks:
|
||||
|
||||
**Message Flooding:** An attacker can flood a server with messages, consuming bandwidth and CPU resources.
|
||||
|
||||
**Split Attacks:** By causing network splits (disconnecting servers), an attacker can:
|
||||
- Create nickname collisions;
|
||||
- Take over channels;
|
||||
- Disrupt service.
|
||||
|
||||
**Resource Exhaustion:** Attackers can attempt to exhaust server resources by:
|
||||
- Creating many channels;
|
||||
- Joining many channels;
|
||||
- Setting many channel modes;
|
||||
- etc.
|
||||
|
||||
Servers SHOULD implement various protections against these attacks, such as:
|
||||
- Rate limiting;
|
||||
- Connection limits;
|
||||
- Flood protection;
|
||||
- Resource limits.
|
||||
|
||||
### 7.4 Channel Takeover
|
||||
|
||||
Because channel collisions are treated as inclusive events (all users from both channels are merged), it is possible for malicious users to "take over" channels by:
|
||||
- Causing a network split;
|
||||
- Creating a channel with the same name on the split network;
|
||||
- Gaining operator privileges;
|
||||
- Waiting for the network to rejoin.
|
||||
|
||||
When the networks rejoin, the malicious users will become part of the original channel, potentially with operator privileges. Various mechanisms have been proposed to address this issue:
|
||||
- Channel delay (See [IRC-CHAN]);
|
||||
- "Safe" channels (See [IRC-CHAN]);
|
||||
- Channel timestamps;
|
||||
- etc.
|
||||
|
||||
However, each mechanism has its own limitations and none completely solve the problem.
|
||||
|
||||
## 8. Current support and availability
|
||||
|
||||
**Mailing lists for IRC related discussion:**
|
||||
- General discussion: ircd-users@irc.org
|
||||
- Protocol development: ircd-dev@irc.org
|
||||
|
||||
**Software implementations:**
|
||||
- ftp://ftp.irc.org/irc/server
|
||||
- ftp://ftp.funet.fi/pub/unix/irc
|
||||
- ftp://coombs.anu.edu.au/pub/irc
|
||||
|
||||
**Newsgroup:** alt.irc
|
||||
|
||||
## 9. Acknowledgements
|
||||
|
||||
Parts of this document were copied from the RFC 1459 [IRC] which first formally documented the IRC Protocol. It has also benefited from many rounds of review and comments. In particular, the following people have made significant contributions to this document:
|
||||
|
||||
Matthew Green, Michael Neumayer, Volker Paulsen, Kurt Roeckx, Vesa Ruokonen, Magnus Tjernstrom, Stefan Zehl.
|
||||
|
||||
## 10. References
|
||||
|
||||
**[KEYWORDS]** Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||||
|
||||
**[IRC]** Oikarinen, J. and D. Reed, "Internet Relay Chat Protocol", RFC 1459, May 1993.
|
||||
|
||||
**[IRC-ARCH]** Kalt, C., "Internet Relay Chat: Architecture", RFC 2810, April 2000.
|
||||
|
||||
**[IRC-CLIENT]** Kalt, C., "Internet Relay Chat: Client Protocol", RFC 2812, April 2000.
|
||||
|
||||
**[IRC-CHAN]** Kalt, C., "Internet Relay Chat: Channel Management", RFC 2811, April 2000.
|
||||
|
||||
## 11. Author's Address
|
||||
|
||||
Christophe Kalt
|
||||
99 Teaneck Rd, Apt #117
|
||||
Ridgefield Park, NJ 07660
|
||||
USA
|
||||
|
||||
EMail: kalt@stealth.net
|
||||
|
||||
## 12. Full Copyright Statement
|
||||
|
||||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||||
|
||||
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
|
||||
|
||||
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
|
||||
|
||||
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
### Acknowledgement
|
||||
|
||||
Funding for the RFC Editor function is currently provided by the Internet Society.
|
||||
38
wiki/SNOMASKS.md
Normal file
38
wiki/SNOMASKS.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# SNOMASKS
|
||||
|
||||
#### Usage:
|
||||
|
||||
```
|
||||
/mode YourNick +s [+|-]<SNOMASK>
|
||||
```
|
||||
|
||||
#### Examples:
|
||||
|
||||
```
|
||||
/mode acidvegas +s +cCfoS
|
||||
/mode acidvegas +s -k
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
| Mode | Description |
|
||||
|-------|-----------------------------------------------------------|
|
||||
| **b** | Server bans |
|
||||
| **B** | DNSBL hits |
|
||||
| **c** | Local connections |
|
||||
| **C** | Remote connections |
|
||||
| **d** | Rejected `/DCC` |
|
||||
| **D** | Debugging *(noisy)* |
|
||||
| **f** | Flood blocks |
|
||||
| **j** | `/JOIN`, `/PART`, & `/KICK` |
|
||||
| **k** | `/KILL` |
|
||||
| **n** | Local `/NICK` |
|
||||
| **N** | Remote `/NICK` |
|
||||
| **o** | IRCOp overriding channels |
|
||||
| **O** | `/CHGNAME`, `/CHGIDENT`, `/CHGHOST`, `/SAJOIN`, `/SAPART` |
|
||||
| **q** | `/QLINE` rejections |
|
||||
| **r** | SPAMREPORT and Spamreport block usage notices |
|
||||
| **R** | JSON-RPC |
|
||||
| **s** | Server notices |
|
||||
| **S** | `/SPAMFILTER` hits |
|
||||
| **v** | `/VHOST` usage |
|
||||
42
wiki/USER-MODES.md
Normal file
42
wiki/USER-MODES.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# USER MODES
|
||||
|
||||
#### Usage:
|
||||
|
||||
```
|
||||
/mode YourNick [+|-]<MODE>
|
||||
```
|
||||
|
||||
#### Examples:
|
||||
|
||||
```
|
||||
/mode acidvegas -x
|
||||
/mode acidvegas +Z
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Key
|
||||
|
||||
`β
= Set by default ` `π = Can not be turned off`
|
||||
|
||||
| | Mode | Name | Description | Restriction |
|
||||
|----|-------|------------|-------------------------------------------------------------------------------|-------------|
|
||||
| | **B** | Bot | Marked as a bot in `/WHOIS` | |
|
||||
| | **d** | Deaf | Can only see messages prefixed with `!@$.` *(used by bots to reduce traffic)* | |
|
||||
| | **D** | Privdeaf | Block private messages from everyone | |
|
||||
| | **G** | Censor | Enable word filters | |
|
||||
| β
| **H** | Hidden | Hide operator status in `/WHOIS` | *Oper* |
|
||||
| π | **i** | Invisible | Hidden in `/WHO` & `/NAMES` from outsiders | |
|
||||
| β
| **I** | Idle | Hide idle time in `/WHOIS` | |
|
||||
| | **o** | Operator | Marked as an operator | *Server* |
|
||||
| π | **p** | Privacy | Hide channels in `/WHOIS` | |
|
||||
| β
| **q** | Unkickable | Unkickable | *Oper* |
|
||||
| | **r** | Registered | Marked as a registered user | *Services* |
|
||||
| | **R** | Regonly | Block private messages from unregistered users | |
|
||||
| | **s** | Snomask | Server notices | *Oper* |
|
||||
| | **S** | Servicebot | Marked as a services bot | *Services* |
|
||||
| | **t** | Vhost | Marked as using a `/VHOST` | *Server* |
|
||||
| β
| **T** | NoCTCP | Prevent CTCP | |
|
||||
| β
| **x** | Cloak | Hide your hostmask | |
|
||||
| | **z** | SSL | Marked as connected via SSL/TLS | *Server* |
|
||||
| | **Z** | Secureonly | Block private message from anyone not using TLS | |
|
||||
1
wiki/USERS.md
Normal file
1
wiki/USERS.md
Normal file
@@ -0,0 +1 @@
|
||||
Coming soon
|
||||
1
wiki/_Footer.md
Normal file
1
wiki/_Footer.md
Normal file
@@ -0,0 +1 @@
|
||||
Β© SuperNETs 2026
|
||||
14
wiki/_Sidebar.md
Normal file
14
wiki/_Sidebar.md
Normal file
@@ -0,0 +1,14 @@
|
||||
###### IRC
|
||||
- [ASCII/ANSI Art](ASCII)
|
||||
- [Ban Policy](./BAN-POLICY)
|
||||
- [Bots](./BOTS)
|
||||
- [Channels](./CHANNELS)
|
||||
- [Clients](./CLIENTS)
|
||||
- [Commands](./COMMANDS)
|
||||
- [Modes](./MODES)
|
||||
- [RFC](./RFC)
|
||||
- [SASL](./SASL)
|
||||
- [Services](./SERVICES)
|
||||
|
||||
###### Lore
|
||||
- [Users](./USERS)
|
||||
Reference in New Issue
Block a user