mirror of
https://repo.or.cz/socat.git
synced 2024-12-23 15:52:33 +00:00
54 lines
1.3 KiB
Bash
54 lines
1.3 KiB
Bash
|
#! /bin/bash
|
||
|
# source: predialog.sh
|
||
|
# Copyright Gerhard Rieger 2009
|
||
|
# Published under the GNU General Public License V.2, see file COPYING
|
||
|
|
||
|
# This is an example script that shows how to write a script for use with socat
|
||
|
# intermediate addresses. it shows a case where an initial dialog on the right
|
||
|
# side is performed. afterwards data is just passed in both directions.
|
||
|
|
||
|
# uncomment this if you want to analyse which file descriptors are open
|
||
|
#filan -s -o+2; sleep 1; echo
|
||
|
|
||
|
# these are the "right side" file descriptors provided by socat; 0 and 1 are
|
||
|
# the "left side" FDs
|
||
|
RINFD=3
|
||
|
ROUTFD=4
|
||
|
|
||
|
verbose=
|
||
|
# parse options
|
||
|
SPACES=" "
|
||
|
while [ -n "$1" ]; do
|
||
|
case "$1" in
|
||
|
-v) verbose=1 ;;
|
||
|
*) echo "$0: unknown option \"$1\"" >&2; exit -1 ;;
|
||
|
esac
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
msg () {
|
||
|
[ "$verbose" ] && echo "$0: $1" >&2
|
||
|
}
|
||
|
|
||
|
# send a request
|
||
|
msg "sending request"
|
||
|
echo -e "CONNECT 10.0.0.1:80 HTTP/1.0\n" >&4
|
||
|
|
||
|
# read reply
|
||
|
msg "waiting for reply"
|
||
|
read -r <&3
|
||
|
case "$REPLY" in
|
||
|
"HTTP/1.0 200 OK") ;;
|
||
|
*) msg "bad reply \"$REPLY\"" exit 1 ;;
|
||
|
esac
|
||
|
# skip headers until empty line
|
||
|
msg "skipping reply headers"
|
||
|
while read -r <&3 && ! [ "$REPLY" = "" ]; do :; done
|
||
|
|
||
|
wait
|
||
|
|
||
|
msg "starting data transfer"
|
||
|
# now just pass traffic in both directions
|
||
|
#SOCAT_OPTS="-lu -d -d -d -d"
|
||
|
exec socat $SOCAT_OPTS - "fd:$ROUTFD:$RINFD"
|