- 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
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
- the german federal office for information security does not approve
- 1980: TVI 920C
- 1987: IBM 3151 (also video), using gnu-screen to translate VT100 sequences
- 1993: windows 3.11
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 1500 cli @ 75 msg/s
- bridge several irc channels from several networks into one r0c channel
- 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
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
)
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
oh you betcha! see the webtty readme
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
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
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)
not really but there is a list of commands and a list of hotkeys, and also UI demystified
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
-
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