[benzedrine.ch logo]
Daniel Hartmeier
Packet Filter
Mailing list
Annoying spammers
Prioritizing ACKs
Transparent squid
Planet Wars
Hexiom solver
Polygon partition
Mikero's grid puzzle
Dark Star

Proxy IRC client and ICB server


You probably know what IRC is, but ICB?

   icb, n. Internet citizen's band, an obscure teleconferencing system used primarily by alumni of certain universities.
      (also called Internet CB or International CB)

Man page

ICBIRC(8)		OpenBSD System Manager's Manual		     ICBIRC(8)

     icbirc - proxy IRC client and ICB server

     icbirc [-d] [-l listen-address] [-p listen-port] [-s server-name] [-P

     icbirc is a proxy that allows to connect an IRC client to an ICB server.
     The proxy accepts client connections, connects to the server, and for-
     wards data between those two connections.

     Commands from the IRC client are translated to ICB commands and forwarded
     to the ICB server.	 Messages from the ICB server are translated to IRC
     messages and forwarded to the IRC client.

     The options are as follows:

     -d			Do not daemonize (detach from controlling terminal)
			and produce debugging output on stdout/stderr.

     -l listen-address	Bind to the specified address when listening for
			client connections.  If not specified, connections to
			any address are accepted.

     -p listen-port	Bind to the specified port when listening for client
			connections.  Defaults to 6667 when not specified.

     -s server-name	Hostname or numerical address of the ICB server to
			connect to.

     -P server-port	Port of the ICB server to connect to.  Defaults to
			7326 when not specified.


	   $ icbirc -s default.icb.net

     IRC (Internet Relay Chat) and ICB (Internet Citizen's Band) are two sepa-
     rate chat protocols.  ICB is an older and simpler protocol, basically a
     subset of IRC.  The two most significant differences (from the client's
     perspective) are:

     An ICB client can only join a single channel (called group).  Joining a
     second channel automatically parts the first channel.

     An ICB channel can only have a single operator (called moderator).	 Giv-
     ing operator status to a second client automatically removes operator
     status from the first client.

     icbirc supports the following IRC commands:

     PASS	   Set the default group, used during login.

     NICK	   Set or change nickname.

     USER	   Supply additional user information (like ident), used dur-
		   ing login.

     LIST	   List all groups.

     WHOIS	   Shows information about a user.

     WHO	   Lists matching users.  Arguments starting with '#' are in-
		   terpreted as channel names (listing all users in the speci-
		   fied channel), anything else is used for a simple string
		   search within users' 'nick!ident@host'.

     JOIN	   Join a group.

     PRIVMSG	   Send an open or personal message.

     NOTICE	   Same as PRIVMSG.

     TOPIC	   Set group topic.

     KICK nick	   Boot nick from group.

     MODE +o nick  Pass moderation to nick.

     QUIT	   Close client and server connection, wait for next client

     Additionally, the command RAWICB can be used to send custom ICB commands.
     The proxy automatically prefixes the correct command length and replaces
     commas with ICB argument separators.  For example:

     RAWICB hm,nick,msg	 Send msg to nick.

     Internet Relay Chat Protocol, RFC 1459.

     Internet Relay Chat: Client Protocol, RFC 2812.

     Internet Relay Chat: Channel Management, RFC 2811.

     ICB Protocol, ftp://ftp.icb.net/pub/icb/src/icbd/Protocol.html.

     The History of ICB, http://www.icb.net/history.html.

     General guide to Netiquette on ICB,

     The first version of icbirc was written in 2003.

     Daniel Hartmeier <daniel@benzedrine.ch>

     ICB is not IRC.  Depending on the ICB community on a particular server,
     netiquette rules vary greatly from common IRC rules (or lack thereof).

     Client scripts or other forms of automated client actions might generate
     noise or violate ICB community policies, and lacking support for some
     commands might confuse the script.	 Clients should be properly configured
     and tested on a dedicated server before connecting to a public server.

     In particular, WHOIS and WHO filtering is done on the proxy. Each such
     request causes the proxy to fetch the entire user list from the ICB serv-
     er (there are no ICB commands that take filters), hence automatic WHOIS
     requests from the IRC client can cause unwanted load on the ICB server
     (turn off 'WHOIS on JOIN' in the IRC client, if enabled).

     On ICB, a moderator (channel operator) can leave the group (channel) and
     rejoin later, preserving his status, as compared to IRC, where the chan-
     nel would be left operator-less in this case.  The proxy does not cur-
     rently detect the operator status on rejoin in this case, and the IRC
     client will (temporarily) show the channel op-less.

     IPv6 is not supported yet.

OpenBSD 3.4			  Aug 6, 2003				     3


There are many IRC clients, I myself like xchat. The whole point of the proxy is that you can use whatever client you like. Tested with xchat, ircII, BitchX and mIRC. irssi works, too, with option lag_max_before_disconnect 0.

[xchat screenshot]


BSD license applies.


2.1: Apr 25, 2016

Return *** as nick in IRC error messages (where missing), add pledge(2) call on OpenBSD, from semarie@.

2.0: Aug 21, 2015

Merge OpenBSD port patches, originally from ray@ in 2009:

Fix corruption that occurs when connecting and reconnecting to icbirc repeatedly. After a while, icbirc starts reusing the command buffer from a previous connection, causing all further connections to incorrectly parse commands.

1.9: Aug 20, 2015

When receiving an IRC PING, additionally send an ICB NOOP, to detect a stalled server connection. Patch from Sebastien Marie <semarie@openbsd.org>.

Related links

Last updated on Tue Sep 26 08:57:43 2017 by daniel@benzedrine.ch.