If processes are running in a container then the fwd process can't read their internal FDs without the CAP_SYS_ADMIN property which is equivalent to sudo. Even with sudo, I think you need to do a lot of work to be able to read them -- spawning a process within the cgroup, doing work there, and then communicating back. This just uses the docker api to populate some default ports, which later get overwritten if fwd can find a native process. The Docker port scan takes about 1.5ms, and the full port scan takes 40+ms, so this adds basically no overhead. |
||
|---|---|---|
| .github/workflows | ||
| .vscode | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| config.toml | ||
| LICENSE | ||
| README.md | ||
| rustfmt.toml | ||
| test.py | ||
fwd
A port-forwarding utility.
Here's how it works:
- Get the latest release of
fwd - You install
fwdon the server somewhere in your$PATH(like/usr/bin/) - You install
fwdon the client (like your laptop) - You run
fwdon 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.)