# CGI:IRC

CGI:IRC is a CGI program written in Perl that allows access to IRC via a web browser. It is designed to be flexible and has many uses such as an IRC gateway for an IRC network, a chat-room for a website or to access IRC when stuck behind a restrictive firewall.
CGI:IRC will work in most browsers, including text based browsers such as Links. To make full use of most of the available features, a newer version is essential; older browsers will work, but CGI:IRC will use a single windowed interface instead and the names list will not update as quickly.

## Main features

With a modern browser (with JavaScript and DHTML enabled), CGI:IRC will present a tabbed interface similar to GUI IRC clients. Tab completion and keyboard shortcuts are available, for example ALT+window-number jumps to a particular window.
Some common IRC client features are unavailable, such as scripting, DCC chat, and file transfers, due to the webserver-based nature of CGI:IRC.

## Use of CGI:IRC

CGI:IRC is used by many IRC networks to provide a way for users to chat on their network from within their web browser. When used in this way, most of the functions are disabled for security reasons, i.e. the user is unable to connect to a different server, sometimes the channels that the user may join are restricted. Due to the nature of CGI:IRC, users are unable to use DCC.
What was a seemingly inconsequential implementation of the IRC protocol is increasingly being seen as a means to evade bans in IRC chat rooms. Several IRC servers have, as a consequence, developed an intolerance for CGI connections. Compounding this development is the fact that there does not exist a means to effectively distinguish between a CGI connection and a real IRC connection.
Some IRC servers may display the true hostname of the connecting client, most will only show the hostname of the CGI:IRC proxy. However, this does not offer much in the way of privacy, since the IP address of the user is hex encoded and included in the ident and/or real name. A simple perl script to decode the IP is included with CGI:IRC. Depending on how CGI:IRC is configured, it may also return the users true IP address (in addition to the HTTP headers) in response to a CTCP USERINFO request.

## Abuse of CGI:IRC

Just like other open proxies, open installations of CGI:IRC, which do not restrict the server used, can also be abused. Usually CGI:IRC is abused to create many clones, which are used to flood an IRC network or a particular user. In response, many networks have started to ban CGI:IRC clients except those which originate from their own CGI:IRC proxy (if they have one).

## Server side

CGI:IRC runs on a webserver such as Apache configured to run Perl, and uses Unix domain sockets. It uses a special HTTP streaming connection while communicating with the user's web browser; this reduces network usage because the user's webpage is not continually being redrawn. Early versions of some web browsers such as Apple Safari had problems with streaming connections.
CGI:IRC can be configured to allow access to any server and channel, or restricted to single instances. One limitation of CGI:IRC with respect to some IRC servers is "Because CGI:IRC acts as a client, connections from it appear to be coming from the web server's address. This allows it to get past firewalls, but if several clients are connecting from the same address, some IRC servers will refuse to accept additional connections beyond a certain limit."