retr0chat telnet/vt100 chat server
Project description
r0c
telnet server
- retr0chat, irc-like chat service for superthin clients (on PyPI)
- MIT-Licensed, 2018-01-07, ed @ irc.rizon.net
- windows telnet 360 noscope <- good video
- see installation or grab the latest release: r0c.py
summary
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
- tries to be irssi
- zero dependencies on python 2.6, 2.7, 3.x
- supports telnet, netcat, /dev/tcp, TLS clients
- is not an irc server, but can bridge to/from irc servers
- modem-aware; comfortable at 1200 bps
- fallbacks for inhumane conditions
- linemode
- no vt100 / ansi escape codes
endorsements
- the german federal office for information security does not approve
compatibility
- 1980: TVI 920C
- 1987: IBM 3151 (also video), using gnu-screen to translate VT100 sequences
- 1993: windows 3.11
features
irc-like:
- public channels with persistent history (pgup/pgdn)
- private messages (
/msg acidburn hey
) - nick completion with
Tab ↹
- 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)
- message input with readline-like editing (arrow-left/right, home/end, backspace)
- history of sent messages (arrow-up/down)
- bandwidth-conservative (push/pop lines instead of full redraws; scroll-regions)
- fast enough; 600 clients @ 750 msgs/sec, or 1'000 cli @ 350 msg/s
- bridge several irc channels from several networks into one r0c channel
windows clients
- use putty in telnet mode
- or the powershell client
- or enable
Telnet Client
in control panel->
programs->
programs and features->
turn windows features on or off, then press WIN+R and runtelnet r0c.int
putty is the best option;
- the powershell client is OK and no longer spammy as of windows 10.0.15063 (win10 1703 / LTSC)
- windows-telnet has a bug (since win7) where non-ascii letters occasionally render but usually dont
- 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
- this is due to a buffer overflow in
linux clients
most to least recommended
client | example |
---|---|
telnet | telnet r0c.int |
socat | socat -,raw,echo=0 tcp:r0c.int:531 |
bash | mostly internals |
netcat | nc r0c.int 531 |
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
)
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
socat -,raw,echo=0 openssl:127.0.0.1:1515,verify=0
stty -icanon; ncat --ssl --ssl-trustfile r0c.crt -v r0c.int 1515
stty -icanon; openssl s_client -CAfile ~/.r0c/cert.crt -nbio -connect r0c.int:1515
- windows: powershell client with port
+1515
(the+
enables TLS)- powershell does not verify certificate; the other clients do
the powershell client and bash client comes bundled with the server; see protips
connecting from a web browser
oh you betcha! see the webtty readme
installation
just run 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 (automatically does port-forwarding)
- on alpine / gentoo: openrc service
- on windows: nssm probably
irc
if you want to connect your r0c instance to an irc network and bridge channels between them, you can do that:
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 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
firewall rules
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
if you're using firewalld, and just want to open up the high ports (not 23 and 531) then this is probably enough:
firewall-cmd --permanent --add-port={23,531,2323,1531,2424,1515,8023}/tcp
firewall-cmd --reload
but having to specify the port when connecting is lame so consider the folllowing --
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):
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
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
iptables -A INPUT -p tcp --dport 8023 -m state --state NEW -j ACCEPT # http/ttyd
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
(you'll have to do this on every reboot)
documentation
not really but there is a list of commands and a list of hotkeys, and also UI demystified
protips
try the following commands and hotkeys after connecting:
/cy
enables colored nicknames/b3
(max cowbell) beeps on every message/v
orctrl-n
hides names and makes wordwrap more obvious; good for viewing a wall of text that somebody pastedCTRL-L
or/r
if rendering breaks
other surprises
-
when running 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 aclients
subfolder over there- if you installed r0c through
pip
instead then the clients will be somewhere crazy likeC:\Users\ed\AppData\Roaming\Python\share\doc\r0c\clients\powershell.ps1
or/home/ed/.local/share/doc/r0c/clients/powershell.ps1
, good luck!
- if you installed r0c through
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file r0c-1.6.1.tar.gz
.
File metadata
- Download URL: r0c-1.6.1.tar.gz
- Upload date:
- Size: 76.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a0bf52f6a7f319992d38b909de708a562ae87d6019954447c31beb297a4b05f7 |
|
MD5 | 95ca009e0db20bb44d896035859e6769 |
|
BLAKE2b-256 | 3c09ecf91aa324e6b95268a8c5a5d871528b373f951f5d8b839a710b3b92099b |
File details
Details for the file r0c-1.6.1-py2.py3-none-any.whl
.
File metadata
- Download URL: r0c-1.6.1-py2.py3-none-any.whl
- Upload date:
- Size: 83.4 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d385ccd828290c43999c6b63270ab562014896e996cef18ba4a83a35a27a82d |
|
MD5 | 0dbc6ac9519e59d615205319a2a339c0 |
|
BLAKE2b-256 | 25ce45e2f277e270964d27b7007112d40b3be46fd6bdbad672604452ffc14e08 |