KatolaZ
c6cdec9c57
|
6 years ago | |
---|---|---|
README.md | 6 years ago | |
TODO | ||
gosher | ||
gosher_serve |
README.md
gosher -- A simple Gopher server in a POSIX shell script
gosher
is a Gopher server in a POSIX shell script. It requires only a
standard netcat(1)
.
You start the server using:
$ ./gosher [<PORT> [<GOPHERDIR>]
If PORT is not specified, it will bind on port 70. If GOPHERDIR is not
provided, it defaults to "./". Before starting gosher
you might need
to modify the values of the variables NETCAT
and STYLE
in gosher
(see "Which netcat?" below).
If the selector is a directory, gosher
will look for a file named
gophermap
to render the submenu. If a gophermap
does not exist,
gosher
looks for the index.gph gopherfile in the folder and, if it
exists, renders it as a gophermap.
Which netcat?
There are currently several different implementations of netcat
, and
each of them works in a slightly different way and/or offers a different
set of options. For the sake of using gosher
, the main issue is
whether your netcat
implementation does exit or not when its standard
input gets closed. Notably, the original netcat
implementation by
hobbit@avian.org does not exit, while other common implementations
(OpenBSD netcat
, ncat
from the nmap project, and GNU netcat
)
normally do. The current version of gosher
can work with different
implementations of netcat
, provided that the variable NETCAT
points
to the netcat
version you want to use, and that the variable STYLE
in gosher
is set correctly. In particular, STYLE
can pe set equal to
either 'pipe' or 'fork'. Please check below what is the recommended
combination for your version of netcat
:
+----------------+--------------+--------------+
| netcat version | STYLE='fork' | STYLE='pipe' |
+----------------+--------------+--------------+
| traditional | YES | NO |
+----------------+--------------+--------------+
| OpenBSD | NO | YES |
+----------------+--------------+--------------+
| ncat | YES | YES |
+----------------+--------------+--------------+
N.B.: Using STYLE='pipe' is preferable, since the '-c' option used by the 'fork' mode is a potential security risk
Why gosher
?
Just for fun. There are only a few TCP/IP application protocols left that can be implemented in a few dozen lines of POSIX shell script, and Gopher (RFC 1436) is one of those.
Why calling it gosher
?
Well, gosher
is just gopher
where the p
is replaced with an s
,
and sh(1)
is all that you need to run gosher
(if we leave
netcat(1)
out...).
Also, gopher
is probably one of the few kosher
protocols out there.
According to the Urban Dictionary, gosher
is "an insult that can mean
anything", so choose your own.