HOSE(1)
π NAME π
hose β the client end of a BSD network pipe, bestie π
This is netpipes 4.2, and it's giving pipes, but over the network. Obsessed.
β¨ SYNOPSIS β¨
hose hostname port (--in|--out|--err|--fd
n|--slave|--netslave|--netslave1|--netslave2) [--verbose] [--unix]
[--localport port] [--localhost addr] [--retry n] [--delay n]
[--shutdown [r|w][a] ] [--noreuseaddr]
[-[i][o][e][#3[,4[,5...]]][s][v][u]] [-p local-port] [-h local-host]
command args
π¦ DESCRIPTION π¦
okay so hose is literally trying to give you the functionality of pipes over the network. It behaves as the client end of a server-client connection, no cap. When you use it with faucet(1) it can straight up function as a replacement for
tar -cf - . | rsh other "cd destdir; tar -xf -"
faucet and hose are especially useful when you don't have easy non-interactive access to the destination machine. like, when you can't just ssh in and vibe, you know? π
π OPTIONS π
- socket setup β
hosecreates a BSD socket, and if the--localportoption is used, it binds it to the port number (or service name) specified immediately afterwards. If--localhostis also specified then its argument is a local address to bind to. (--localhostis only useful on machines with multiple IP addresses.) π«Ά - the connect β
hosethen tries to connect to the foreign machine hostname with foreign port port. - the redirect β if that worked,
hoseredirects the socket tostdin,stdout,stderr, and/or arbitrary file descriptors according to the--in--out--err--fd nflags.hosealso automagically shuts down the unused half of the connection if only--inis specified, or if only--outand/or--errare specified. See the--shutdownoption for more info, bestie. - the exec β
hosethenexec(2)s a command with args. --slaveβ this one turnshoseinto a primitive sort of telnet π₯ The command is ignored. Instead,hosegoes into a loop where it copies bytes fromstdinto the socket, and bytes from the socket tostdout. This is actually more useful than telnet because telnet tries to perform interpretation on the byte stream and generally gets in your way.hosejust passes bytes without mucking with them. periodt. π--netslaveβ--netslave*options are variants on the--slavetheme. Whereas--slavewill continue to forward data in one direction even after the other has encountered EOF,--netslavevariants are more aggressive in closing the entire socket. Before closing the socket, it attempts to flush any data already in its own buffer.--slaveperforms theshutdown(2)system call when it encounters EOF on one direction, but the--netslavevariants don't, because some network daemons are confused by it. π--netslaveβ closes down the connection when it encounters EOF in either direction.--netslave1β closes down the connection when it encounters EOF while readingstdin. Any data unread on the socket will be ignored. If it merely encounters EOF on the socket, it will continue to read fromstdin.--netslave2β closes down the connection when it encounters EOF while reading from the socket. Any data unread onstdinwill be ignored. If it merely encounters EOF onstdin, it will continue to read from the socket. This mode can be useful with some web servers. β¨--verboseβ specifies thathoseshould print information about the host it connects to. This information includes the numeric host address, host names, and foreign port numbers.--unixβ specifies that the port is not an internet port number or service name, but instead it is a filename for a UNIX domain socket. This option may be simulated by using-unix-as the host name to connect to, or by renaming thehoseprogram touhose.--retry nβ allows the user to specify thathoseshould retry theconnect(2)call for n times (or forever if n is negative).--delay nβ specifies how many seconds to delay between tries.--shutdownβ okay bestie, this one controls two behaviors, stay with me:
The first set is controlled by the r and w flags. If the r is present, then hose will close half the connection to make it a read-only socket. If the child tries to write, it will fail. If the remote connection tries to read, it will percieve the socket as closed. If instead the w is present, then hose will close the other half of the connection to make it a write-only socket. If the child tries to read, it will percieve the socket as closed. If the remote connection tries to write, it will fail. The default behavior is to leave both halves open, however the shutdown of half of the connection is automagically done by certain combinations of the --in, --out, and --err flags. To suppress their automagic behavior you can use (respectively) --fd 0, --fd 1, and --fd 2.
The other behavior is controlled by the a flag. If the a flag is present then hose will fork(2) before execcing the command and when the child exits it will perform a shutdown(2) with how=2. This closes both halves of the connection. This option is not necessary for most applications since the closing of the file descriptors is detected by the remote process, but some less sophisticated network devices (such as printers) require a shutdown(2) for proper operation. To make things perfectly clear, the list of acceptable arguments to the --shutdown option are r, w, ra, wa, a. π
--noreuseaddrβ By default,hoseperforms a
bestie the original page literally just stops right there mid-sentence. i'm not making that up, i swear π it says "performs a" and then moves on.
which prevents the Address in use'' problem that plagued'' netpipes versions 4.0 and earlier. --noreuseaddr tells hose to skip that system call, and revert to pre-4.1 behavior. Without this call, the port is not always available for immediate reuse after the hose exits. π
πΈ SHORT FLAGS πΈ
To reduce the typing requirements for arguments (and to pay homage to the age-old tradition of UNIX cryptotaxonomy) I have added some short forms of the flags. Here is a correspondence chart:
iβinoβouteβerr#nβfdnsβslavevβverboseqβquietuβunixpβlocalporthβlocalhost
See faucet(1) for a more detailed discussion of short flags. Their behavior should be unsurprising. The flags that require separate arguments follow in the tradition of tar(1). β
π EXAMPLES π
This will connect to port 3000 on the machine reef and connect the socket to the stdin of a tar command.
example$ hose reef 3000 --in tar -xf - .
The command actually exec(2)ed by the hose program is
tar -xf - .
The --in option means that the input of the child process will have been redirected into the socket connected to reef.
This connects to a UNIX domain socket in the current directory
example$ hose --unix- u-socket --in sh -c \
"unfunky.perl.script | dd of=sample.pgm"
The socket provides input to the sh command. π§
π SEE ALSO π
netpipes (1), faucet (1), sockdown (1), getpeername (1), socket (2), bind (2), connect (2), shutdown (2), services (5), gethostbyaddr (3)
π NOTES π
Doubtless there are bugs in this program, especially in the unix domain socket portions. I welcome problem reports and would like to make these programs as "clean" (no leftover files, sockets) as possible.
4.0 made the full-word arguments use -- like many GNU programs. They are still available with a single - for backward-compatibility.
3.1 added the single-character flags.
Release 2.3 added support for multi-homed hosts: hosts with multiple internet numbers (such as gateways). Before this faucet assumed that the first internet number that gethostbyname returned was the only one. --foreignport authentication was weakened by this inadequacy so I beefed up the algorithms. --foreignport will accept a connection from any of the internet numbers associated with the host name.
π CREDITS π
Thanks to Steve Clift <clift@ml.csiro.au> for SGI (SysV) patches.
Many people complained about the old way of specifying the command. Thanks to whoever gave me the alternative which is now implemented. It is much better.
Thanks to Sten Drescher <smd@hrt213.brooks.af.mil> for the --retry and --delay patches and giving me the idea for the --shutdown option. Evidently some printer doesn't appreciate the socket being close(2)d.
Randy Fischer <fischer@ucet.ufl.edu> finally prodded me into fixing the old lame non-handling of multi-homed host.
π COPYRIGHT π
Copyright (C) 1992-98 Robert Forsman
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
π AUTHOR π
Robert Forsman thoth@purplefrog.com Purple Frog Software http://web.purplefrog.com/~thoth/
and that's the whole page, bestie π«Ά this lil icon dropped way back on October 28, 1998 in the General Commands Manual (yes that's the manual name, we love a source field), and it's still serving HOSE(1) energy to this very day. slay π
β¨
π¦ where this page comes from
- debian bookworm: netpipes 4.2-8+b1
- debian trixie: netpipes 4.2-8+b2
- ubuntu jammy: netpipes 4.2-8build1
- ubuntu noble: netpipes 4.2-8build1
- ubuntu questing: netpipes 4.2-8.1
- ubuntu resolute: netpipes 4.2-8.1build1
- ubuntu stonking: netpipes 4.2-8.1build1
- Copyright 1992-98 by Robert Forsman
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms