2018-01-07 06:08:47 +00:00
# `r0c` telnet server
2018-03-21 07:43:16 +00:00
* retr0chat, irc-like chat service for superthin clients [(on PyPI) ](https://pypi.org/project/r0c/ )
2018-01-07 06:08:47 +00:00
* MIT-Licensed, 2018-01-07, ed @ irc.rizon.net
2018-01-30 11:10:41 +00:00
* **[windows telnet 360 noscope](https://ocv.me/r0c.webm)** < - good video
2018-01-07 06:08:47 +00:00
2018-03-20 04:11:18 +00:00
![screenshot of telnet connected to a r0c server ](docs/r0c.png )
2018-01-16 19:40:05 +00:00
2023-04-02 21:12:01 +00:00
* see [installation ](#installation ) or grab the latest release: ** [r0c.py ](https://github.com/9001/r0c/releases/latest/download/r0c.py )**
2020-12-22 00:27:27 +00:00
2018-01-27 11:07:05 +00:00
## summary
2018-01-07 06:08:47 +00:00
2018-01-29 19:07:23 +00:00
imagine being stuck on ancient gear, in the middle of nowhere, on a slow connection between machines that are even more archaic than the toaster you're trying to keep from falling apart
retr0chat is the lightweight, no-dependencies, runs-anywhere solution for when life gives you lemons
2018-01-07 06:08:47 +00:00
* tries to be irssi
2018-01-29 18:53:58 +00:00
* zero dependencies on python 2.6, 2.7, 3.x
2022-04-03 05:11:04 +00:00
* supports telnet, netcat, /dev/tcp, TLS clients
2024-04-27 23:04:56 +00:00
* is not an irc server, but can [bridge to/from irc servers ](#irc )
2022-10-12 05:36:22 +00:00
* [modem-aware ](https://ocv.me/r0c-2400.webm ); comfortable at 1200 bps
2018-01-07 06:08:47 +00:00
* fallbacks for inhumane conditions
* linemode
* no vt100 / ansi escape codes
2018-01-27 11:07:05 +00:00
2022-03-16 22:06:10 +00:00
## endorsements
* the german federal office for information security [does not approve ](https://ocv.me/stuff/r0c-bsi.png )
2024-03-30 15:14:17 +00:00
## compatibility
2024-04-02 16:48:06 +00:00
* 1980: [TVI 920C ](https://a.ocv.me/pub/g/nerd-stuff/r0c-tvi-920c.jpg )
* 1987: [IBM 3151 ](https://a.ocv.me/pub/g/nerd-stuff/r0c-ibm-3151.jpg ) (also [video ](https://a.ocv.me/pub/g/nerd-stuff/r0c-ibm-3151.webm )), using gnu-screen to translate VT100 sequences
2024-04-27 23:04:56 +00:00
* 1993: [windows 3.11 ](https://a.ocv.me/pub/g/nerd-stuff/r0c-for-workgroups.png )
2024-03-30 15:14:17 +00:00
2021-09-19 16:11:02 +00:00
## features
irc-like:
* public channels with persistent history (pgup/pgdn)
* private messages (`/msg acidburn hey`)
2021-09-19 17:05:13 +00:00
* nick completion with `Tab ↹`
2021-09-19 16:11:02 +00:00
* notifications (bell/visual) on hilights and PMs
* command subset (`/nick`, `/join` , `/part` , `/names` , `/topic` , `/me` )
* inline message coloring, see `/help`
technical:
* client behavior detection (echo, colors, charset, newline)
2021-09-19 17:05:13 +00:00
* message input with readline-like editing (arrow-left/right, home/end, backspace)
* history of sent messages (arrow-up/down)
2021-09-19 16:11:02 +00:00
* bandwidth-conservative (push/pop lines instead of full redraws; scroll-regions)
2023-09-19 21:26:34 +00:00
* fast enough; 600 clients @ 750 msgs/sec, or 1'000 cli @ 350 msg/s
2024-04-27 23:04:56 +00:00
* [bridge ](#irc ) several irc channels from several networks into one r0c channel
2021-09-19 16:11:02 +00:00
2018-01-29 18:53:58 +00:00
## windows clients
* use [putty ](https://the.earth.li/~sgtatham/putty/latest/w32/putty.exe ) in telnet mode
* or [the powershell client ](clients/powershell.ps1 )
* or enable `Telnet Client` in control panel `->` programs `->` programs and features `->` turn windows features on or off, then press WIN+R and run `telnet r0c.int`
putty is the best option;
2021-09-22 19:50:09 +00:00
* the powershell client is OK and no longer spammy as of windows 10.0.15063 (win10 1703 / LTSC)
2021-09-19 18:43:30 +00:00
* windows-telnet has a bug (since win7) where [non-ascii letters occasionally render but usually dont ](https://ocv.me/stuff/win10-telnet.webm )
2021-09-22 19:50:09 +00:00
* this is due to a buffer overflow in `telnet.exe` , so r0c will apply a rate-limit to avoid it
* looks like messages larger than 512 bytes end up messing with the unicode glyphs area? or something
2018-01-29 18:53:58 +00:00
## linux clients
2018-01-27 11:07:05 +00:00
most to least recommended
| client | example |
| :--- | :--- |
| telnet | `telnet r0c.int` |
| socat | `socat -,raw,echo=0 tcp:r0c.int:531` |
2018-01-27 21:36:16 +00:00
| bash | [mostly internals ](clients/bash.sh ) |
2018-01-27 11:07:05 +00:00
| netcat | `nc r0c.int 531` |
2018-01-27 21:36:16 +00:00
2018-08-21 22:38:35 +00:00
you can even `exec 147<>/dev/tcp/r0c.int/531;cat<&147&while IFS= read -rn1 x;do [ -z "$x" ]&&x=$'\n';printf %s "$x">&147;done` (disconnect using `exec 147<&-; killall cat #sorry` )
2018-01-29 18:53:58 +00:00
2022-04-03 05:11:04 +00:00
## tls clients
if you enable TLS with `-tpt 2424` (telnet) and/or `-tpn 1515` (netcat) you can connect to r0c with TLS encryption using any of the following:
* `telnet-ssl -zssl -zsecure -zcacert=r0c.crt r0c.int 2424`
* `socat -,raw,echo=0 openssl:r0c.int:1515,cafile=cert.crt`
2023-09-19 21:26:34 +00:00
* `socat -,raw,echo=0 openssl:127.0.0.1:1515,verify=0`
2022-04-03 05:11:04 +00:00
* `stty -icanon; ncat --ssl --ssl-trustfile r0c.crt -v r0c.int 1515`
2023-09-16 22:08:25 +00:00
* `stty -icanon; openssl s_client -CAfile ~/.r0c/cert.crt -nbio -connect r0c.int:1515`
2023-09-16 22:32:08 +00:00
* windows: [powershell client ](https://github.com/9001/r0c/blob/master/clients/powershell.ps1 ) with port `+1515` (the `+` enables TLS)
2023-09-16 22:08:25 +00:00
* powershell does not verify certificate; the other clients do
2022-04-03 05:11:04 +00:00
2023-09-18 18:40:39 +00:00
the powershell client and bash client comes bundled with the server; see [protips ](#protips )
2023-04-02 21:12:01 +00:00
2023-10-10 03:17:33 +00:00
## connecting from a web browser
![screenshot of chrome connecting to r0c through ttyd ](docs/r0cc.png )
oh you betcha! see the [webtty readme ](webtty/ )
2023-04-02 21:12:01 +00:00
# installation
just run ** [r0c.py ](https://github.com/9001/r0c/releases/latest/download/r0c.py )** and that's it (usually)
* or install through pypi (python3 only): `python3 -m pip install --user -U r0c`
you can run it as a service so it autostarts on boot:
* on most linux distros: [systemd service ](docs/systemd/r0c.service ) (automatically does port-forwarding)
* on alpine / gentoo: [openrc service ](docs/openrc/r0c )
* on windows: [nssm ](https://nssm.cc/ ) probably
2024-04-27 23:04:56 +00:00
## irc
if you want to connect your r0c instance to an irc network and bridge channels between them, you can do that:
![screenshot of a r0c channel being bridged to an irc channel ](docs/r0c-irc.png )
```bash
python3 r0c.py --ircn a,127.0.0.1,6667,r0c --ircb a,chat,g
```
run that command to start r0c with irc bridging enabled; r0c will then connect to an irc server (which we nicknamed `a` ) on `127.0.0.1:6667` with the irc-nick `r0c` and bridge the irc-channel `#chat` with the r0c-channel `#g`
if you then start an irc server locally, for example [miniircd ](https://github.com/jrosdahl/miniircd/blob/master/miniircd ) by running `python3 miniircd --verbose` then you're all set, people can now join r0c by connecting via irc
to bridge additional channels on the same network, add more `--ircb` args, for example `--ircb a,tech,tech` like in the screenshot, and optionally add more networks with `--ircn`
2018-01-31 19:40:27 +00:00
## firewall rules
2023-04-02 21:12:01 +00:00
skip this section if:
* you are using the systemd service
* or you are running as root and do not have a firewall
* or you're on windows
2023-09-18 19:37:51 +00:00
if you're using firewalld, and just want to open up the high ports (not 23 and 531) then this is probably enough:
```bash
2023-10-10 03:17:33 +00:00
firewall-cmd --permanent --add-port={23,531,2323,1531,2424,1515,8023}/tcp
2023-09-18 19:37:51 +00:00
firewall-cmd --reload
```
but having to specify the port when connecting is lame so consider the folllowing --
2018-01-31 19:41:48 +00:00
telnet uses port 23 by default, so on the server you'll want to port-forward `23` to `2323` (and `531` to `1531` for plaintext):
2018-01-31 19:40:27 +00:00
```bash
iptables -A INPUT -p tcp --dport 23 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 531 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 2323 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 1531 -m state --state NEW -j ACCEPT
2023-04-02 21:12:01 +00:00
iptables -A INPUT -p tcp --dport 2424 -m state --state NEW -j ACCEPT # tls telnet
iptables -A INPUT -p tcp --dport 1515 -m state --state NEW -j ACCEPT # tls netcat
2023-10-10 03:17:33 +00:00
iptables -A INPUT -p tcp --dport 8023 -m state --state NEW -j ACCEPT # http/ttyd
2018-01-31 19:40:27 +00:00
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23 -j REDIRECT --to-port 2323
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 531 -j REDIRECT --to-port 1531
```
2023-04-02 21:12:01 +00:00
(you'll have to do this on every reboot)
2023-09-18 18:40:39 +00:00
# documentation
2018-01-29 18:53:58 +00:00
2023-09-19 21:26:34 +00:00
not really but there is a [list of commands ](docs/help-commands.md ) and a [list of hotkeys ](docs/help-hotkeys.md ), and also [UI demystified ](docs/help-ui.md )
2023-09-18 18:40:39 +00:00
## protips
try the following commands and hotkeys after connecting:
* `/cy` enables colored nicknames
* `/b3` (max cowbell) beeps on every message
* `/v` or `ctrl-n` hides names and makes wordwrap more obvious; good for viewing a wall of text that somebody pasted
2024-04-01 21:52:12 +00:00
* `CTRL-L` or `/r` if rendering breaks
2023-09-18 18:40:39 +00:00
## other surprises
* when running ** [r0c.py ](https://github.com/9001/r0c/releases/latest/download/r0c.py )** it will extract a few bundled clients for your convenience (powershell and bash); look for the `[SFX] sfxdir: /tmp/pe-r0c.1000` message during startup, they'll be in a `clients` subfolder over there
* if you installed r0c through `pip` instead then the clients will be somewhere crazy like `C:\Users\ed\AppData\Roaming\Python\share\doc\r0c\clients\powershell.ps1` or `/home/ed/.local/share/doc/r0c/clients/powershell.ps1` , good luck!