Connect two netcats to each other
mkfifo backpipe
nc localhost 55545 0backpipe |
mkfifo backpipe
nc localhost 55545 0backpipe
Telnet with readline and a history:
socat -d -d READLINE,history=$HOME/.http_history \
TCP4:www.domain.org:www,crnl |
socat -d -d READLINE,history=$HOME/.http_history \
TCP4:www.domain.org:www,crnl
Talk to your modem in raw mode:
socat - /dev/ttyS0,raw,echo=0,crnl |
socat - /dev/ttyS0,raw,echo=0,crnl
Simulate tail -f:
socat -u /var/log/messages,seek-end=0,ignoreeof - |
socat -u /var/log/messages,seek-end=0,ignoreeof -
Give a random interactive program, such as nslookup, a history:
socat readline,history=.nslookup_hist exec:"nslookup",pty,ctty,setsid,echo=0 |
socat readline,history=.nslookup_hist exec:"nslookup",pty,ctty,setsid,echo=0
Use your modem with a non-persistent history:
socat readline /dev/ttyS0,raw,echo=0,crlf,nonblock |
socat readline /dev/ttyS0,raw,echo=0,crlf,nonblock
Use your modem with a persistent history:
socat READLINE,history:/tmp/serial.cmds \
OPEN:/dev/ttyS0,ispeed=9600,ospeed=9600,crnl,raw,sane,echo=false |
socat READLINE,history:/tmp/serial.cmds \
OPEN:/dev/ttyS0,ispeed=9600,ospeed=9600,crnl,raw,sane,echo=false
To dos (as in tofrodos):
From dos (as in tofrodos):
Run sendmail daemon with your favorite network options
Warning: using this wrong may result in becoming an open relay!
socat TCP-LISTEN:25,fork,ip-ttl=4,ip-tos=7,tcp-maxseg=576 EXEC:"/usr/sbin/sendmail -bs",nofork |
socat TCP-LISTEN:25,fork,ip-ttl=4,ip-tos=7,tcp-maxseg=576 EXEC:"/usr/sbin/sendmail -bs",nofork
Send a mail using chat (from ppp package):
socat -d -d system:'/usr/sbin/chat "220 " "HELO loopback" "250 " "MAIL FROM: <root@localhost>" "250 " "RCPT TO: root" "250 " "DATA" "354 " "test'$(echo -e "\r.")'" "250 " "QUIT"',pty,echo=0,cr tcp:localhost:25,crlf,nodelay |
socat -d -d system:'/usr/sbin/chat "220 " "HELO loopback" "250 " "MAIL FROM: <root@localhost>" "250 " "RCPT TO: root" "250 " "DATA" "354 " "test'$(echo -e "\r.")'" "250 " "QUIT"',pty,echo=0,cr tcp:localhost:25,crlf,nodelay
Connect remote X :1 to local X :0
socat exec:'ssh root@troas socat unix-l\:/tmp/.X11-unix/X1 -' unix:/tmp/.X11-unix/X0 |
socat exec:'ssh root@troas socat unix-l\:/tmp/.X11-unix/X1 -' unix:/tmp/.X11-unix/X0
Note the escaping of the colon in the remote command.
Sending a file - Server sending the file
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat |
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
Sending a file - Server receiving the file
server$ socat -u TCP-LISTEN:9876,reuseaddr OPEN:out.txt,creat
client$ socat -u FILE:test.txt TCP:127.0.0.1:9876 |
server$ socat -u TCP-LISTEN:9876,reuseaddr OPEN:out.txt,creat
client$ socat -u FILE:test.txt TCP:127.0.0.1:9876
Be a syslog server:
socat -u UDP4-LISTEN:5140,reuseaddr,fork OPEN:/tmp/syslog.msg,creat,append |
socat -u UDP4-LISTEN:5140,reuseaddr,fork OPEN:/tmp/syslog.msg,creat,append
I can't figure out how to put a newline after each message...
Send syslog messages to screen:
socat -t0 -T0 -u UDP4-LISTEN:514,reuseaddr,fork - |
socat -t0 -T0 -u UDP4-LISTEN:514,reuseaddr,fork -
To get time from time server:
socat TCP:time.nist.gov:13 - |
socat TCP:time.nist.gov:13 -
Really sick - use socat as a VPN solution:
socat -d -d \
TUN:192.168.99.2/24,up \
SYSTEM:"ssh root@remote-server socat -d -d - 'TUN:192.168.99.1/24,up'" |
socat -d -d \
TUN:192.168.99.2/24,up \
SYSTEM:"ssh root@remote-server socat -d -d - 'TUN:192.168.99.1/24,up'"
This must be run as a user that can modify tap/tun devices on both sides of the tunnel.
Use a remote modem
On the side with the modem
socat /dev/ttyS0,raw,echo=0 tcp4-listen:3334 |
socat /dev/ttyS0,raw,echo=0 tcp4-listen:3334
On the side where you want the modem transferred
socat PTY,link=$HOME/vmodem0,raw,echo=0 TCP:servername:3334 |
socat PTY,link=$HOME/vmodem0,raw,echo=0 TCP:servername:3334
You can now access remote /dev/ttyS0 through local $HOME/vmodem0
Use a remote modem over SSH
socat PTY,link=$HOME/vmodem0,waitslave \
EXEC:"ssh root@remote-server socat - /dev/ttyS0" |
socat PTY,link=$HOME/vmodem0,waitslave \
EXEC:"ssh root@remote-server socat - /dev/ttyS0"
You can now access remote /dev/ttyS0 through local $HOME/vmodem0. Remove waitslave to keep alive after local client disconnect.
Using OpenSSL over UDP
This uses a chaining method I believe to be only available in socat2.
On the listening side:
socat2 - "OPENSSL-SERVER,cert=client.pem,cafile=server.crt|UDP4-LISTEN:4430,fork" |
socat2 - "OPENSSL-SERVER,cert=client.pem,cafile=server.crt|UDP4-LISTEN:4430,fork"
On the connecting side:
socat2 exec:ls "OPENSSL-CLIENT,cert=server.pem,cafile=client.crt|UDP4:localhost:4430" |
socat2 exec:ls "OPENSSL-CLIENT,cert=server.pem,cafile=client.crt|UDP4:localhost:4430"
OpenSSL Tunnel
First, generate certificates and distribute them to either side:
FILENAME=server
openssl genrsa -out $FILENAME.key 1024
openssl req -new -key $FILENAME.key -x509 -days 3653 -out $FILENAME.crt
cat $FILENAME.key $FILENAME.crt >$FILENAME.pem
chmod 600 $FILENAME.key $FILENAME.pem
FILENAME=client
openssl genrsa -out $FILENAME.key 1024
openssl req -new -key $FILENAME.key -x509 -days 3653 -out $FILENAME.crt
cat $FILENAME.key $FILENAME.crt >$FILENAME.pem
chmod 600 $FILENAME.key $FILENAME.pem |
FILENAME=server
openssl genrsa -out $FILENAME.key 1024
openssl req -new -key $FILENAME.key -x509 -days 3653 -out $FILENAME.crt
cat $FILENAME.key $FILENAME.crt >$FILENAME.pem
chmod 600 $FILENAME.key $FILENAME.pem FILENAME=client
openssl genrsa -out $FILENAME.key 1024
openssl req -new -key $FILENAME.key -x509 -days 3653 -out $FILENAME.crt
cat $FILENAME.key $FILENAME.crt >$FILENAME.pem
chmod 600 $FILENAME.key $FILENAME.pem
On the listening side:
socat openssl-listen:4433,reuseaddr,cert=server.pem,cafile=client.crt tcp-connect:localhost |
socat openssl-listen:4433,reuseaddr,cert=server.pem,cafile=client.crt tcp-connect:localhost
On the connecting side:
socat - openssl-connect:server.domain.org:4433,cert=client.pem,cafile=server.crt |
socat - openssl-connect:server.domain.org:4433,cert=client.pem,cafile=server.crt
More information:
1 2
© GeekLabInfo Playing with the sockets: socat and netcat is a post from GeekLab.info. You are free to copy materials from GeekLab.info, but you are required to link back to http://www.geeklab.info (3 votes, average: 5.00 out of 5)
Loading...