2020-01-02 This Gopher Hole

OK, so this site is reachable via Gopher. What does that mean? Modern browsers no longer support the Gopher protocol. It’s a very simple protocol: you contact a server (per default on port 70, unencrypted) and you send a *selector* – a string, terminated by a carriage return and a newline, `「\r\n」`, also known as CRLF (ASCII 13 followed by ASCII 10). By default, sending no query string gets you a *menu* (and sending no query string means sending a carriage return and a newline).

Gopher

In practice, you can often just send a newline instead of both a carriage return and a newline.

If you don’t send anything, the connection will eventually time out.

After the client has sent the selector, the server replies with some stuff and hangs up.

In theory, the server is supposed to end their reply with a line consisting of just a period, in other words, a carriage return and a newline, a period, and another carriage return and a newline, `「\r\n.\r\n」`. I guess the purpose of that convention was used to prevent clients from hanging up in a very, very slow environment. These days, it’s optional and most servers simply hang up once the last line is sent.

Note that this is the same as the Finger protocol used on port 79. The only difference is that a Finger client is supposed to print the text that is returned where as a Gopher client can handle more content types (one of which being the *menu* mentioned above).

Finger

Back to this site, however. Here’s a way to use `telnet` to access Alex Schroeder (note the underline instead of space for this particular server). Also note that traditionally, many Gopher server provide access to a file system and thus most selectors are actually a file path, that is most of them start with a slash. Not this server, however! This server is a wiki and all pages are equal. It’s a non-hierarchical flat list of page names. 🙂

Alex Schroeder

alex@melanobombus:~$ **telnet alexschroeder.ch 70**
Trying 2a02:418:6a04:178:209:50:237:1...
Connected to alexschroeder.ch.
Escape character is '^]'.

Hi, and welcome to the wiki!



I was born in the seventies and [[Alex Schroeder Online|grew up with computers]].
Connection closed by foreign host.

The same works with `finger`:

alex@melanobombus:~$ **finger Alex_Schroeder@alexschroeder.ch**
Hi, and welcome to the wiki!



I was born in the seventies and [[Alex Schroeder Online|grew up with computers]].

And with `netcat`:

alex@melanobombus:~$ **echo Alex_Schroeder | nc alexschroeder.ch 70**
Hi, and welcome to the wiki!



I was born in the seventies and [[Alex Schroeder Online|grew up with computers]].

And of course `lynx` (note the leading zero in the URL which tells the server that the client is expecting a text document):

alex@melanobombus:~$ **lynx -dump gopher://alexschroeder.ch/0Alex_Schroeder**
Hi, and welcome to the wiki!



I was born in the seventies and [[Alex Schroeder Online|grew up with computers]]
.

Or a dedicated gopher client like VF-1:

alex@melanobombus:~$ **vf1 gopher://alexschroeder.ch/0Alex_Schroeder**
Using config /home/alex/.config/.vf1rc
Welcome to VF-1!
Enjoy your flight through Gopherspace...
Hi, and welcome to the wiki!

• If you need to get in touch, see the [[Contact]] page.
• You can find a short intro on the [[About]] page.

I was born in the seventies and [[Alex Schroeder Online|grew up with computers]].
VF-1>

I also serve an encrypted version using TLS on port 7443. Here’s using `gnutls-cli`. Note that I need a small delay or there’s some weird error from `gnutls-cli`.

alex@melanobombus:~$ **(sleep 1; echo Alex_Schroeder) | gnutls-cli alexschroeder.ch:7443**
Processed 128 CA certificate(s).
Resolving 'alexschroeder.ch:7443'...
Connecting to '2a02:418:6a04:178:209:50:237:1:7443'...
- Certificate type: X.509
- Got a certificate list of 2 certificates.
- Certificate[0] info:
 - subject `CN=alexschroeder.ch', issuer `CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US', serial 0x0402abc35b9bfb85d01186f9ba7619541a4f, RSA key 4096 bits, signed using RSA-SHA256, activated `2019-11-09 12:50:11 UTC', expires `2020-02-07 12:50:11 UTC', pin-sha256="utZ7px/ScBFF2pcnO1FET5CxwiaJRg/aoimuZsNk4dg="
	Public Key ID:
		sha1:5eac13e1dfd1c969f055fddc811aa1b91f72f254
		sha256:bad67ba71fd2701145da97273b51444f90b1c22689460fdaa229ae66c364e1d8
	Public Key PIN:
		pin-sha256:utZ7px/ScBFF2pcnO1FET5CxwiaJRg/aoimuZsNk4dg=

- Certificate[1] info:
 - subject `CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US', issuer `CN=DST Root CA X3,O=Digital Signature Trust Co.', serial 0x0a0141420000015385736a0b85eca708, RSA key 2048 bits, signed using RSA-SHA256, activated `2016-03-17 16:40:46 UTC', expires `2021-03-17 16:40:46 UTC', pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="
- Status: The certificate is trusted.
- Description: (TLS1.3)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(AES-256-GCM)
- Options:
- Handshake was completed

- Simple Client Mode:

Hi, and welcome to the wiki!



I was born in the seventies and [[Alex Schroeder Online|grew up with computers]].
- Peer has closed the GnuTLS connection

Anyway, enough of that. 🙂

If you want to get really into it, 2017-12-30 Gopher Wiki is about editing pages on this site using a Gopher extension. Yay!

2017-12-30 Gopher Wiki

If you think that the above is all good enough and there’s no need to know more about the *menus* I mentioned above, then you might like my idea of a Simple Text Server and a Simple Text Client. Who needs Gopher menus? Nobody! Check it out: Nimi Mute just serves text. Like Gopher. Like Finger.

Simple Text Server

Simple Text Client

Nimi Mute

​#Gopher