A small port-forwarding utility
Find a file
John Doty 5e96b37f5b Docker support
This is the most basic kind of docker querying you will find. Does not
support HTTPS. Seems to work for local docker engines. Has not been
tested against remote docker engines, or full URLs.

Note that if you want this to work you'll have to configure docker to
allow manipulation without being root, i.e., the user you connect as
will need to be in the `docker` group.

This was done instead of pulling in the `bollard` crate. Maybe I'm
being silly, but `bollard` uses a whole lot of other crates in the
name of being general and robust. These crates, however, add an
unacceptable size to the final binary. (In the experiment I ran, on a
release build, the binary size went from 2904696 to 4840968 bytes: an
increase of 1.8 MB. With this patch the release binary is 2986360
bytes, which is an increase of 80k.)

I wanted to see exactly what I could get away with when it came to
talking to docker. This here actually seems like a fine compromise:
HTTP is very simple if you only have to worry about one specific
server, and JSON is not very hard to parse if you don't care too much
about error handling, or are willing to play fast and loose with
punctuation (which I am).
2024-08-05 12:04:26 -07:00
.github/workflows Allow manual trigger of workflow dispatch 2024-04-14 06:51:26 -07:00
.vscode I'm not sure I ever actually got these to work? 2022-10-26 07:12:59 -07:00
src Docker support 2024-08-05 12:04:26 -07:00
.gitignore Enumerate all of the listening processes and their ports 2022-10-04 18:13:57 +00:00
Cargo.lock Docker support 2024-08-05 12:04:26 -07:00
Cargo.toml Docker support 2024-08-05 12:04:26 -07:00
config.toml Starting configuration, probably doesn't work 2022-10-18 11:28:56 -07:00
LICENSE Fill out Cargo.toml and also LICENSE 2022-10-26 07:11:38 -07:00
README.md Make notes about the future 2023-08-28 09:25:46 -07:00
rustfmt.toml Try to make the UI better when unconnected 2022-10-16 08:55:30 -07:00
test.py Protocol version, async pump, start some testing 2022-12-16 13:57:52 -08:00

fwd

A port-forwarding utility.

Here's how it works:

  1. Get the latest release of fwd
  2. You install fwd on the server somewhere in your $PATH (like /usr/bin/)
  3. You install fwd on the client (like your laptop)
  4. You run fwd on the client to connect to the server, like so:
doty@my.laptop$ fwd some.server

fwd will connect to some.server via ssh, and then show you a screen listing all of the ports that the server is listening on locally. Use the up and down arrow keys (or j/k) to select the port you're interested in and press e to toggle forwarding of that port. Now, connections to that port locally will be forwarded to the remote server.

If the port is something that might be interesting to a web browser, you can press <ENTER> with the port selected to open a browser pointed at that port.

If something is going wrong, pressing l will toggle logs that might explain it.

Press q to quit.

Future Improvements:

  • Clipboard integration: send something from the remote end of the pipe to the host's clipboard. (Sometimes you really want to copy some big buffer from the remote side and your terminal just can't make that work.)

  • Client heartbeats: I frequently wind up in a situation where the pipe is stalled: not broken but nothing is getting through. (This happens with my coder.com pipes all the time.)