new examples, corrections eg. for SCTP, some fixes

This commit is contained in:
Gerhard Rieger 2008-10-15 22:54:12 +02:00
parent 3a060c1cf3
commit 3d41d1db9d

View file

@ -10,7 +10,7 @@ def(Filan)(0)(bf(Filan))
def(procan)(0)(bf(procan)) def(procan)(0)(bf(procan))
def(Procan)(0)(bf(Procan)) def(Procan)(0)(bf(Procan))
manpage(socat)(1)(Sep 2008)(socat)() manpage(socat)(1)(Oct 2008)()()
whenhtml( whenhtml(
label(CONTENTS) label(CONTENTS)
@ -348,6 +348,15 @@ label(ADDRESS_IP_SENDTO)dit(bf(tt(IP-SENDTO:<host>:<protocol>)))
link(IP-RECV)(ADDRESS_IP_RECV), link(IP-RECV)(ADDRESS_IP_RECV),
link(UDP-SENDTO)(ADDRESS_UDP_SENDTO) link(UDP-SENDTO)(ADDRESS_UDP_SENDTO)
link(UNIX-SENDTO)(ADDRESS_UNIX_SENDTO) link(UNIX-SENDTO)(ADDRESS_UNIX_SENDTO)
label(ADDRESS_INTERFACE)dit(bf(tt(INTERFACE:<interface>)))
Communicate with a network connected on an interface using raw packets
including link level data. link(<interface>)(TYPE_INTERFACE) is the name of
the network interface. Currently only available on Linux.
Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET) nl()
Useful options:
link(pf)(OPTION_PROTOCOL_FAMILY)
link(type)(OPTION_SO_TYPE)nl()
See also: link(ip-recv)(ADDRESS_IP_RECV)
label(ADDRESS_IP4_SENDTO)dit(bf(tt(IP4-SENDTO:<host>:<protocol>))) label(ADDRESS_IP4_SENDTO)dit(bf(tt(IP4-SENDTO:<host>:<protocol>)))
Like link(IP-SENDTO)(ADDRESS_IP_SENDTO), but always uses IPv4.nl() Like link(IP-SENDTO)(ADDRESS_IP_SENDTO), but always uses IPv4.nl()
Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(IP4)(GROUP_IP4) nl() Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(IP4)(GROUP_IP4) nl()
@ -541,15 +550,6 @@ label(ADDRESS_NAMED_PIPE)dit(bf(tt(PIPE:<filename>)))
link(mode)(OPTION_MODE), link(mode)(OPTION_MODE),
link(unlink-early)(OPTION_UNLINK_EARLY)nl() link(unlink-early)(OPTION_UNLINK_EARLY)nl()
See also: link(unnamed pipe)(ADDRESS_UNNAMED_PIPE) See also: link(unnamed pipe)(ADDRESS_UNNAMED_PIPE)
label(ADDRESS_INTERFACE)dit(bf(tt(INTERFACE:<interface>)))
Communicate with a network connected on an interface using raw packets
including link level data. link(<interface>)(TYPE_INTERFACE) is the name of
the network interface. Currently only available on Linux.
Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET) nl()
Useful options:
link(pf)(OPTION_PROTOCOL_FAMILY)
link(so-type)(OPTION_SO_TYPE)nl()
See also: link(ip-recv)(ADDRESS_IP_RECV)
label(ADDRESS_UNNAMED_PIPE)dit(bf(tt(PIPE))) label(ADDRESS_UNNAMED_PIPE)dit(bf(tt(PIPE)))
Creates an unnamed pipe and uses it for reading and writing. It works as an Creates an unnamed pipe and uses it for reading and writing. It works as an
echo, because everything written echo, because everything written
@ -621,8 +621,8 @@ label(ADDRESS_SCTP_CONNECT)dit(bf(tt(SCTP-CONNECT:<host>:<port>)))
link(connect-timeout)(OPTION_CONNECT_TIMEOUT), link(connect-timeout)(OPTION_CONNECT_TIMEOUT),
link(tos)(OPTION_TOS), link(tos)(OPTION_TOS),
link(mtudiscover)(OPTION_MTUDISCOVER), link(mtudiscover)(OPTION_MTUDISCOVER),
link(mss)(OPTION_MSS), link(sctp-maxseg)(OPTION_SCTP_MAXSEG),
link(nodelay)(OPTION_NODELAY), link(sctp-nodelay)(OPTION_SCTP_NODELAY),
link(nonblock)(OPTION_NONBLOCK), link(nonblock)(OPTION_NONBLOCK),
link(sourceport)(OPTION_SOURCEPORT), link(sourceport)(OPTION_SOURCEPORT),
link(retry)(OPTION_RETRY), link(retry)(OPTION_RETRY),
@ -654,7 +654,8 @@ label(ADDRESS_SCTP_LISTEN)dit(bf(tt(SCTP-LISTEN:<port>)))
link(tcpwrap)(OPTION_TCPWRAPPERS), link(tcpwrap)(OPTION_TCPWRAPPERS),
link(pf)(OPTION_PROTOCOL_FAMILY), link(pf)(OPTION_PROTOCOL_FAMILY),
link(backlog)(OPTION_BACKLOG), link(backlog)(OPTION_BACKLOG),
link(mss)(OPTION_MSS), link(sctp-maxseg)(OPTION_SCTP_MAXSEG),
link(sctp-nodelay)(OPTION_SCTP_NODELAY),
link(su)(OPTION_SUBSTUSER), link(su)(OPTION_SUBSTUSER),
link(reuseaddr)(OPTION_REUSEADDR), link(reuseaddr)(OPTION_REUSEADDR),
link(retry)(OPTION_RETRY), link(retry)(OPTION_RETRY),
@ -707,7 +708,7 @@ label(ADDRESS_SOCKET_DATAGRAM)dit(bf(tt(SOCKET-DATAGRAM:<domain>:<type>:<protoco
Please note that you can - beyond the options of the specified groups - also Please note that you can - beyond the options of the specified groups - also
use options of higher level protocols when you apply socat option use options of higher level protocols when you apply socat option
link(-g)(option_g).nl() link(-g)(option_g).nl()
Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(RANGE)(GROUP_RANGE) Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(RANGE)(GROUP_RANGE)nl()
Useful options: Useful options:
link(bind)(OPTION_BIND), link(bind)(OPTION_BIND),
link(range)(OPTION_RANGE), link(range)(OPTION_RANGE),
@ -752,7 +753,7 @@ label(ADDRESS_SOCKET_RECV)dit(bf(tt(SOCKET_RECV:<domain>:<type>:<protocol>:<loca
OS documentation and include files to find the appropriate values. The OS documentation and include files to find the appropriate values. The
local-address must be the link(data)(TYPE_DATA) representation of a sockaddr local-address must be the link(data)(TYPE_DATA) representation of a sockaddr
structure without sa_family and (BSD) sa_len components.nl() structure without sa_family and (BSD) sa_len components.nl()
Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(RANGE)(GROUP_RANGE) Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(RANGE)(GROUP_RANGE)nl()
Useful options: Useful options:
link(range)(OPTION_RANGE), link(range)(OPTION_RANGE),
link(setsockopt-int)(OPTION_SETSOCKOPT_INT), link(setsockopt-int)(OPTION_SETSOCKOPT_INT),
@ -774,7 +775,7 @@ label(ADDRESS_SOCKET_RECVFROM)dit(bf(tt(SOCKET_RECVFROM:<domain>:<type>:<protoco
to find the appropriate values. The local-address must be the to find the appropriate values. The local-address must be the
link(data)(TYPE_DATA) representation of a sockaddr structure without link(data)(TYPE_DATA) representation of a sockaddr structure without
sa_family and (BSD) sa_len components.nl() sa_family and (BSD) sa_len components.nl()
Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(CHILD)(GROUP_CHILD),link(RANGE)(GROUP_RANGE) Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(CHILD)(GROUP_CHILD),link(RANGE)(GROUP_RANGE)nl()
Useful options: Useful options:
link(fork)(OPTION_FORK), link(fork)(OPTION_FORK),
link(range)(OPTION_RANGE), link(range)(OPTION_RANGE),
@ -797,7 +798,7 @@ label(ADDRESS_SOCKET_SENDTO)dit(bf(tt(SOCKET_SENDTO:<domain>:<type>:<protocol>:<
appropriate values. The remote-address must be the link(data)(TYPE_DATA) appropriate values. The remote-address must be the link(data)(TYPE_DATA)
representation of a sockaddr structure without sa_family and (BSD) sa_len representation of a sockaddr structure without sa_family and (BSD) sa_len
components.nl() components.nl()
Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET) Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET)nl()
Useful options: Useful options:
link(bind)(OPTION_BIND), link(bind)(OPTION_BIND),
link(setsockopt-int)(OPTION_SETSOCKOPT_INT), link(setsockopt-int)(OPTION_SETSOCKOPT_INT),
@ -1946,38 +1947,39 @@ COMMENT( x00 end of option list
label(OPTION_MTUDISCOVER)dit(bf(tt(mtudiscover=<0|1|2>))) label(OPTION_MTUDISCOVER)dit(bf(tt(mtudiscover=<0|1|2>)))
Takes 0, 1, 2 to never, want, or always use path MTU discover on this Takes 0, 1, 2 to never, want, or always use path MTU discover on this
socket. socket.
COMMENT(label(OPTION_HRDINCL)dit(bf(tt(hdrincl))) COMMENT(label(OPTION_HRDINCL)dit(bf(tt(ip-hdrincl)))
Tell the raw socket that the application data includes the IP header.) Tell the raw socket that the application data includes the IP header.)
COMMENT(label(OPTION_IP_MULTICAST_LOOP)dit(bf(tt(multicastloop))) COMMENT(label(OPTION_IP_MULTICAST_LOOP)dit(bf(tt(ip-multicastloop)))
Allow looping back outgoing multicast to the local interface.) Allow looping back outgoing multicast to the local interface.)
COMMENT(label(OPTION_IP_MULTICAST_TTL)dit(bf(tt(multicastttl))) COMMENT(label(OPTION_IP_MULTICAST_TTL)dit(bf(tt(ip-multicastttl)))
Set the TTL for outgoing multicast packets.) Set the TTL for outgoing multicast packets.)
label(OPTION_IP_PKTINFO)dit(bf(tt(pktinfo))) label(OPTION_IP_PKTINFO)dit(bf(tt(ip-pktinfo)))
Sets the IP_PKTINFO socket option. This enables receiving and logging of Sets the IP_PKTINFO socket option. This enables receiving and logging of
ancillary messages containing destination address and interface (Linux). ancillary messages containing destination address and interface (Linux)
COMMENT(label(OPTION_PKTOPTS)dit(bf(tt(pktopts))) (link(example)(EXAMPLE_ANCILLARY)).
COMMENT(label(OPTION_PKTOPTS)dit(bf(tt(ip-pktopts)))
Set the IP_PKTOPTIONS socket option.) Set the IP_PKTOPTIONS socket option.)
label(OPTION_IP_RECVERR)dit(bf(tt(recverr))) label(OPTION_IP_RECVERR)dit(bf(tt(ip-recverr)))
Sets the IP_RECVERR socket option. This enables receiving and logging of Sets the IP_RECVERR socket option. This enables receiving and logging of
ancillary messages containing detailled error information. ancillary messages containing detailled error information.
label(OPTION_IP_RECVOPTS)dit(bf(tt(recvopts))) label(OPTION_IP_RECVOPTS)dit(bf(tt(ip-recvopts)))
Sets the IP_RECVOPTS socket option. This enables receiving and logging of IP Sets the IP_RECVOPTS socket option. This enables receiving and logging of IP
options ancillary messages (Linux, *BSD). options ancillary messages (Linux, *BSD).
label(OPTION_IP_RECVTOS)dit(bf(tt(recvtos))) label(OPTION_IP_RECVTOS)dit(bf(tt(ip-recvtos)))
Sets the IP_RECVTOS socket option. This enables receiving and logging of TOS Sets the IP_RECVTOS socket option. This enables receiving and logging of TOS
(type of service) ancillary messages (Linux). (type of service) ancillary messages (Linux).
label(OPTION_IP_RECVTTL)dit(bf(tt(recvttl))) label(OPTION_IP_RECVTTL)dit(bf(tt(ip-recvttl)))
Sets the IP_RECVTTL socket option. This enables receiving and logging of TTL Sets the IP_RECVTTL socket option. This enables receiving and logging of TTL
(time to live) ancillary messages (Linux, *BSD). (time to live) ancillary messages (Linux, *BSD).
COMMENT(label(OPTION_RETOPTS)dit(bf(tt(retopts))) COMMENT(label(OPTION_RETOPTS)dit(bf(tt(ip-retopts)))
Set the IP_RETOPTS socket option.) Set the IP_RETOPTS socket option.)
label(OPTION_IP_RECVDSTADDR)dit(bf(tt(recvdstaddr))) label(OPTION_IP_RECVDSTADDR)dit(bf(tt(ip-recvdstaddr)))
Sets the IP_RECVDSTADDR socket option. This enables receiving and logging of Sets the IP_RECVDSTADDR socket option. This enables receiving and logging of
ancillary messages containing destination address ancillary messages containing destination address (*BSD)
(*BSD). (link(example)(EXAMPLE_ANCILLARY)).
label(OPTION_IP_RECVIF)dit(bf(tt(recvif))) label(OPTION_IP_RECVIF)dit(bf(tt(ip-recvif)))
Sets the IP_RECVIF socket option. This enables receiving and logging of Sets the IP_RECVIF socket option. This enables receiving and logging of
interface ancillary messages (*BSD). interface ancillary messages (*BSD) (link(example)(EXAMPLE_ANCILLARY)).
COMMENT(label(OPTION_ROUTERALERT)dit(bf(tt(routeralert))) COMMENT(label(OPTION_ROUTERALERT)dit(bf(tt(routeralert)))
Set the IP_ROUTER_ALERT socket option.) Set the IP_ROUTER_ALERT socket option.)
label(OPTION_IP_ADD_MEMBERSHIP) label(OPTION_IP_ADD_MEMBERSHIP)
@ -2150,8 +2152,8 @@ startdit()enddit()nl()
em(bf(UDP, TCP, and SCTP option groups)) em(bf(UDP, TCP, and SCTP option groups))
Here we find options that are related to the network port mechanism and that Here we find options that are related to the network port mechanism and thus
thus can be used with UDP, TCP, and SCTP client and server addresses. can be used with UDP, TCP, and SCTP client and server addresses.
startdit() startdit()
label(OPTION_SOURCEPORT)dit(bf(tt(sourceport=<port>))) label(OPTION_SOURCEPORT)dit(bf(tt(sourceport=<port>)))
For outgoing (client) TCP and UDP connections, it sets the source For outgoing (client) TCP and UDP connections, it sets the source
@ -2834,7 +2836,7 @@ startdit()
label(EXAMPLE_ADDRESS_TCP4_CONNECT) label(EXAMPLE_ADDRESS_TCP4_CONNECT)
dit(bf(tt(socat - TCP4:www.domain.org:80))) dit(bf(tt(socat - TCP4:www.domain.org:80)))
Transfers data between link(STDIO)(ADDRESS_STDIO) (-) and a transfers data between link(STDIO)(ADDRESS_STDIO) (-) and a
link(TCP4)(ADDRESS_TCP4_CONNECT) connection to port 80 of host link(TCP4)(ADDRESS_TCP4_CONNECT) connection to port 80 of host
www.domain.org. This example results in an interactive connection similar to www.domain.org. This example results in an interactive connection similar to
telnet or netcat. The stdin terminal parameters are not changed, so you may telnet or netcat. The stdin terminal parameters are not changed, so you may
@ -2851,22 +2853,22 @@ mancommand(\.fi)
htmlcommand(<dt><code><strong>socat -d -d READLINE,history=$HOME/.http_history \</strong><br> htmlcommand(<dt><code><strong>socat -d -d READLINE,history=$HOME/.http_history \</strong><br>
<strong>TCP4:www.domain.org:www,crnl</strong></code><dd>) <strong>TCP4:www.domain.org:www,crnl</strong></code><dd>)
This is similar to the previous example, but you can edit the current line in a this is similar to the previous example, but you can edit the current line in a
bash like manner (link(READLINE)(ADDRESS_READLINE)) and use the bash like manner (link(READLINE)(ADDRESS_READLINE)) and use the
link(history)(OPTION_HISTORY) file .http_history; socat() link(history)(OPTION_HISTORY) file .http_history; socat() prints messages about
prints messages about progress (link(-d -d)(option_d_d)). The port is specified by service name progress (link(-d -d)(option_d_d)). The port is specified by service name
(www), and correct network line termination characters (link(crnl)(OPTION_CRNL)) instead of NL (www), and correct network line termination characters
are used. (link(crnl)(OPTION_CRNL)) instead of NL are used.
label(EXAMPLE_ADDRESS_TCP4_LISTEN) label(EXAMPLE_ADDRESS_TCP4_LISTEN)
dit(bf(tt(socat TCP4-LISTEN:www TCP4:www.domain.org:www))) dit(bf(tt(socat TCP4-LISTEN:www TCP4:www.domain.org:www)))
Installs a simple TCP port forwarder. With installs a simple TCP port forwarder. With
link(TCP4-LISTEN)(ADDRESS_TCP4_LISTEN) it listens on local port "www" until a link(TCP4-LISTEN)(ADDRESS_TCP4_LISTEN) it listens on local port "www" until a
connection comes in, accepts it, then connects to the remote host connection comes in, accepts it, then connects to the remote host
(link(TCP4)(ADDRESS_TCP4_CONNECT)) and starts data transfer. It will not accept a (link(TCP4)(ADDRESS_TCP4_CONNECT)) and starts data transfer. It will not accept
second connection. a econd connection.
label(EXAMPLE_OPTION_BIND_TCP4) label(EXAMPLE_OPTION_BIND_TCP4)
label(EXAMPLE_OPTION_REUSEADDR) label(EXAMPLE_OPTION_REUSEADDR)
@ -2890,9 +2892,10 @@ arbitrary number of parallel or consecutive connections by
link(fork)(OPTION_FORK)'ing a new link(fork)(OPTION_FORK)'ing a new
process after each code(accept()). It provides a little security by process after each code(accept()). It provides a little security by
link(su)(OPTION_SUBSTUSER)'ing to user link(su)(OPTION_SUBSTUSER)'ing to user
nobody after forking; it only permits connections from the private 10 network (link(range)(OPTION_RANGE)); nobody after forking; it only permits connections from the private 10 network
due to link(reuseaddr)(OPTION_REUSEADDR), it allows immediate restart after master process's (link(range)(OPTION_RANGE)); due to link(reuseaddr)(OPTION_REUSEADDR), it
termination, even if some child sockets are not completely shut down. allows immediate restart after master process's termination, even if some child
sockets are not completely shut down.
With link(-lmlocal2)(option_lm), socat logs to stderr until successfully With link(-lmlocal2)(option_lm), socat logs to stderr until successfully
reaching the accept loop. Further logging is directed to syslog with facility reaching the accept loop. Further logging is directed to syslog with facility
local2. local2.
@ -2912,7 +2915,7 @@ mancommand(\.fi)
htmlcommand(<dt><code><strong>socat TCP4-LISTEN:5555,fork,tcpwrap=script \</strong><br> htmlcommand(<dt><code><strong>socat TCP4-LISTEN:5555,fork,tcpwrap=script \</strong><br>
<strong>EXEC:/bin/myscript,chroot=/home/sandbox,su-d=sandbox,pty,stderr</strong></code><dd>) <strong>EXEC:/bin/myscript,chroot=/home/sandbox,su-d=sandbox,pty,stderr</strong></code><dd>)
A simple server that accepts connections a simple server that accepts connections
(link(TCP4-LISTEN)(ADDRESS_TCP4_LISTEN)) and link(fork)(OPTION_FORK)'s a new (link(TCP4-LISTEN)(ADDRESS_TCP4_LISTEN)) and link(fork)(OPTION_FORK)'s a new
child process for each connection; every child acts as single relay. child process for each connection; every child acts as single relay.
The client must match the rules for daemon process name "script" in The client must match the rules for daemon process name "script" in
@ -2958,7 +2961,7 @@ label(EXAMPLE_OPTION_ECHO)
label(EXAMPLE_OPTION_ESCAPE) label(EXAMPLE_OPTION_ESCAPE)
dit(bf(tt(socat -,raw,echo=0,escape=0x0f /dev/ttyS0,raw,echo=0,crnl))) dit(bf(tt(socat -,raw,echo=0,escape=0x0f /dev/ttyS0,raw,echo=0,crnl)))
Opens an interactive connection via the serial line, e.g. for talking with a opens an interactive connection via the serial line, e.g. for talking with a
modem. link(raw)(OPTION_RAW) and link(echo)(OPTION_ECHO) set the console's and modem. link(raw)(OPTION_RAW) and link(echo)(OPTION_ECHO) set the console's and
ttyS0's terminal parameters to practicable values, link(crnl)(OPTION_CRNL) ttyS0's terminal parameters to practicable values, link(crnl)(OPTION_CRNL)
converts to correct newline characters. link(escape)(OPTION_ESCAPE) allows to converts to correct newline characters. link(escape)(OPTION_ESCAPE) allows to
@ -2979,7 +2982,7 @@ mancommand(\.fi)
htmlcommand(<dt><code><strong>socat UNIX-LISTEN:/tmp/.X11-unix/X1,fork \</strong><br> htmlcommand(<dt><code><strong>socat UNIX-LISTEN:/tmp/.X11-unix/X1,fork \</strong><br>
<strong>SOCKS4:host.victim.org:127.0.0.1:6000,socksuser=nobody,sourceport=20</strong></code><dd>) <strong>SOCKS4:host.victim.org:127.0.0.1:6000,socksuser=nobody,sourceport=20</strong></code><dd>)
With link(UNIX-LISTEN)(ADDRESS_UNIX_LISTEN), socat() opens a listening with link(UNIX-LISTEN)(ADDRESS_UNIX_LISTEN), socat() opens a listening
unixdomain() socket file(/tmp/.X11-unix/X1). This path corresponds unixdomain() socket file(/tmp/.X11-unix/X1). This path corresponds
to local XWindow display :1 on your machine, so XWindow client connections to to local XWindow display :1 on your machine, so XWindow client connections to
DISPLAY=:1 are accepted. Socat() then speaks with DISPLAY=:1 are accepted. Socat() then speaks with
@ -2999,7 +3002,7 @@ label(EXAMPLE_option_u)
label(EXAMPLE_OPTION_IGNOREEOF) label(EXAMPLE_OPTION_IGNOREEOF)
dit(bf(tt(socat -u /tmp/readdata,seek-end=0,ignoreeof -))) dit(bf(tt(socat -u /tmp/readdata,seek-end=0,ignoreeof -)))
This is an example for unidirectional data transfer this is an example for unidirectional data transfer
(link(-u)(option_u)). Socat() transfers data (link(-u)(option_u)). Socat() transfers data
from file /tmp/readdata (implicit address link(GOPEN)(ADDRESS_GOPEN)), starting from file /tmp/readdata (implicit address link(GOPEN)(ADDRESS_GOPEN)), starting
at its current end (link(seek-end)(OPTION_SEEK_END)=0 lets socat() start at its current end (link(seek-end)(OPTION_SEEK_END)=0 lets socat() start
@ -3038,7 +3041,7 @@ mancommand(\.fi)
htmlcommand(<dt><code><strong>socat -u TCP4-LISTEN:3334,reuseaddr,fork \</strong><br> htmlcommand(<dt><code><strong>socat -u TCP4-LISTEN:3334,reuseaddr,fork \</strong><br>
<strong>OPEN:/tmp/in.log,creat,append</strong></code><dd>) <strong>OPEN:/tmp/in.log,creat,append</strong></code><dd>)
Implements a simple network based message collector. implements a simple network based message collector.
For each client connecting to port 3334, a new child process is generated (option link(fork)(OPTION_FORK)). For each client connecting to port 3334, a new child process is generated (option link(fork)(OPTION_FORK)).
All data sent by the clients are link(append)(OPTION_APPEND)'ed to the file /tmp/in.log. All data sent by the clients are link(append)(OPTION_APPEND)'ed to the file /tmp/in.log.
If the file does not exist, socat link(creat)(OPTION_CREAT)'s it. If the file does not exist, socat link(creat)(OPTION_CREAT)'s it.
@ -3048,7 +3051,7 @@ process.
COMMENT( COMMENT(
dit(bf(tt(socat TCP4-LISTEN:3335,reuseaddr,fork OPEN:/tmp/motd,rdonly))) dit(bf(tt(socat TCP4-LISTEN:3335,reuseaddr,fork OPEN:/tmp/motd,rdonly)))
Implements a simple network based motd server. implements a simple network based motd server.
For each client connecting to port 3335, a new child process is generated For each client connecting to port 3335, a new child process is generated
(option link(fork)(OPTION_FORK)). (option link(fork)(OPTION_FORK)).
The contents of the file /tmp/motd is sent to each client. The contents of the file /tmp/motd is sent to each client.
@ -3059,7 +3062,7 @@ process.
COMMENT( COMMENT(
dit(bf(tt(socat - TCP4-LISTEN:8080,mtudiscover=0,rcvbuf=2048))) dit(bf(tt(socat - TCP4-LISTEN:8080,mtudiscover=0,rcvbuf=2048)))
Changes some socket parameters to confuse active OS fingerprinting methods. changes some socket parameters to confuse active OS fingerprinting methods.
link(mtudiscover)(OPTION_MTUDISCOVER)=0 sets the DF (don'ft fragment flag) in link(mtudiscover)(OPTION_MTUDISCOVER)=0 sets the DF (don'ft fragment flag) in
the IP packets to 0 and link(rcvbuf)(OPTION_RCVBUF) changes the initial TCP the IP packets to 0 and link(rcvbuf)(OPTION_RCVBUF) changes the initial TCP
window size. window size.
@ -3068,7 +3071,7 @@ window size.
label(EXAMPLE_OPTION_NOECHO) label(EXAMPLE_OPTION_NOECHO)
dit(bf(tt(socat READLINE,noecho='[Pp]assword:' EXEC:'ftp ftp.server.com',pty,setsid,ctty))) dit(bf(tt(socat READLINE,noecho='[Pp]assword:' EXEC:'ftp ftp.server.com',pty,setsid,ctty)))
Wraps a command line history (link(READLINE)(ADDRESS_READLINE)) around the link(EXEC)(ADDRESS_EXEC)'uted ftp client utility. wraps a command line history (link(READLINE)(ADDRESS_READLINE)) around the link(EXEC)(ADDRESS_EXEC)'uted ftp client utility.
This allows editing and reuse of FTP commands for relatively comfortable This allows editing and reuse of FTP commands for relatively comfortable
browsing through the ftp directory hierarchy. The password is echoed! browsing through the ftp directory hierarchy. The password is echoed!
link(pty)(OPTION_PTY) is required to have ftp issue a prompt. link(pty)(OPTION_PTY) is required to have ftp issue a prompt.
@ -3082,7 +3085,7 @@ label(EXAMPLE_OPTION_WAITSLAVE)
label(EXAMPLE_OPTION_NONBLOCK) label(EXAMPLE_OPTION_NONBLOCK)
(bf(tt(socat PTY,link=$HOME/dev/vmodem0,raw,echo=0,waitslave EXEC:'"ssh modemserver.us.org socat - /dev/ttyS0,nonblock,raw,echo=0"'))) (bf(tt(socat PTY,link=$HOME/dev/vmodem0,raw,echo=0,waitslave EXEC:'"ssh modemserver.us.org socat - /dev/ttyS0,nonblock,raw,echo=0"')))
Generates a pseudo terminal generates a pseudo terminal
device (link(PTY)(ADDRESS_PTY)) on the client that can be reached under the device (link(PTY)(ADDRESS_PTY)) on the client that can be reached under the
symbolic link(link)(OPTION_SYMBOLIC_LINK) file($HOME/dev/vmodem0). symbolic link(link)(OPTION_SYMBOLIC_LINK) file($HOME/dev/vmodem0).
An application that expects a serial line or modem An application that expects a serial line or modem
@ -3180,6 +3183,15 @@ sends a broadcast to the network 192.168.1.0/24 and receives the replies of the
timeservers there. Ignores NTP packets from hosts outside this network. timeservers there. Ignores NTP packets from hosts outside this network.
label(EXAMPLE_ADDRESS_GENERIC_CLIENT)
dit(bf(tt(socat - SOCKET-DATAGRAM:2:2:17:x007bxc0a80100x0000000000000000,bind=x007bx00000000x0000000000000000,setsockopt-int=1:6:1,range=x0000xc0a80100x0000000000000000:x0000xffffff00x0000000000000000)))
is semantically equivalent to the link(previous
example)(EXAMPLE_ADDRESS_UDP4_BROADCAST_CLIENT), but all parameters are
specified in generic form. the value 6 of setsockopt-int is the Linux value for
tt(SO_BROADCAST).
label(EXAMPLE_ADDRESS_IP4_BROADCAST_CLIENT) label(EXAMPLE_ADDRESS_IP4_BROADCAST_CLIENT)
dit(bf(tt(socat - IP4-DATAGRAM:255.255.255.255:44,broadcast,range=10.0.0.0/8))) dit(bf(tt(socat - IP4-DATAGRAM:255.255.255.255:44,broadcast,range=10.0.0.0/8)))
@ -3216,9 +3228,33 @@ dit(bf(tt(socat PTY,link=/var/run/ppp,raw,echo=0 INTERFACE:hdlc0)))
circumvents the problem that pppd requires a serial device and thus might not circumvents the problem that pppd requires a serial device and thus might not
be able to work on a synchronous line that is represented by a network device. be able to work on a synchronous line that is represented by a network device.
socat creates a PTY to make pppd happy, binds to the network interface hdlc0, socat creates a PTY to make pppd happy, binds to the network
and can transfer data between both devices. Use pppd on device /var/run/ppp link(interface)(ADDRESS_INTERFACE) tt(hdlc0), and can transfer data between
then. both devices. Use pppd on device tt(/var/run/ppp) then.
label(EXAMPLE_HTTPECHO)
dit(bf(tt(socat -T 1 -d -d TCP-L:10081,reuseaddr,fork,crlf SYSTEM:"echo -e \"\\\"HTTP/1.0 200 OK\\\nDocumentType: text/plain\\\n\\\ndate: \$\(date\)\\\nserver:\$SOCAT_SOCKADDR:\$SOCAT_SOCKPORT\\\nclient: \$SOCAT_PEERADDR:\$SOCAT_PEERPORT\\\n\\\"\"; cat; echo -e \"\\\"\\\n\\\"\"")))
creates a simple HTTP echo server: each HTTP client that connects gets a valid
HTTP reply that contains information about the client address and port as it is
seen by the server host, the host address (which might vary on multihomed
servers), and the original client request.
label(EXAMPLE_ANCILLARY)
dit(bf(tt(socat -d -d UDP4-RECVFROM:9999,so-broadcast,so-timestamp,ip-pktinfo,ip-recverr,ip-recvopts,ip-recvtos,ip-recvttl!!- SYSTEM:'export; sleep 1' |grep SOCAT)))
waits for incoming UDP packets on port 9999 and prints the environment
variables provided by socat. On BSD based systems you have to replace
link(tt(ip-pktinfo))(OPTION_IP_PKTINFO) with link(tt(ip-recvdstaddr))(OPTION_IP_RECVDSTADDR),link(tt(ip-recvif))(OPTION_IP_RECVIF). Especially interesting is
SOCAT_IP_DSTADDR: it contains the target address of the packet which may be a
unicast, multicast, or broadcast address.
label(EXAMPLE_GENERICSOCKET)
dit(bf(tt()))
enddit() enddit()
@ -3290,7 +3326,7 @@ dit(bf(SOCAT_FORK_WAIT) (input)) Specifies the time (seconds) to sleep the
parent and child processes after successful fork(). Useful for debugging. parent and child processes after successful fork(). Useful for debugging.
dit(bf(SOCAT_VERSION) (output)) Socat sets this variable to its version string, dit(bf(SOCAT_VERSION) (output)) Socat sets this variable to its version string,
e.g. tt("1.6.1.0") for released versions or e.g. tt("1.6.0.1+envvar") for e.g. tt("1.7.0.0") for released versions or e.g. tt("1.6.0.1+envvar") for
temporary versions; can be used in scripts invoked by socat. temporary versions; can be used in scripts invoked by socat.
dit(bf(SOCAT_PID) (output)) Socat sets this variable to its process id. In case dit(bf(SOCAT_PID) (output)) Socat sets this variable to its process id. In case
@ -3305,16 +3341,18 @@ dit(bf(SOCAT_PEERADDR) (output)) With passive socket addresses (all LISTEN and
RECVFROM addresses), this variable is set to a string describing the peers RECVFROM addresses), this variable is set to a string describing the peers
socket address. Port information is not included. socket address. Port information is not included.
dit(bf(SOCAT_PEERPORT) (output)) With appropriate passive socket addresses (TCP dit(bf(SOCAT_PEERPORT) (output)) With appropriate passive socket addresses
and UDP - LISTEN and RECVFROM), this variable is set to a string containing the (TCP, UDP, and SCTP - LISTEN and RECVFROM), this variable is set to a string containing the
number of the peer port. number of the peer port.
dit(bf(SOCAT_SOCKADDR) (output)) With all LISTEN addresses, this variable is dit(bf(SOCAT_SOCKADDR) (output)) With all LISTEN addresses, this variable is
set to a string describing the local socket address. Port information is not set to a string describing the local socket address. Port information is not
included. included link(example)(EXAMPLE_HTTPECHO)
dit(bf(SOCAT_SOCKPORT) (output)) With TCP-LISTEN and UDP-LISTEN addresses, this dit(bf(SOCAT_SOCKPORT) (output)) With link(TCP-LISTEN)(ADDRESS_TCP_LISTEN),
variable is set to the local port. link(UDP-LISTEN)(ADDRESS_UDP_LISTEN), and
link(SCTP-LISTEN)(ADDRESS_SCTP_LISTEN) addresses, this variable is set to the
local port.
dit(bf(SOCAT_TIMESTAMP) (output)) With all RECVFROM addresses where address dit(bf(SOCAT_TIMESTAMP) (output)) With all RECVFROM addresses where address
option link(so-timestamp)(OPTION_SO_TIMESTAMP) is applied, socat sets this option link(so-timestamp)(OPTION_SO_TIMESTAMP) is applied, socat sets this
@ -3410,7 +3448,7 @@ standard specifications available on the Internet for free.
label(VERSION) label(VERSION)
manpagesection(VERSION) manpagesection(VERSION)
This man page describes version 1.6.0 of socat(). This man page describes version 1.7.0 of socat().
label(BUGS) label(BUGS)