mirror of
https://repo.or.cz/socat.git
synced 2025-06-19 23:28:43 +00:00
Test script socks5server-echo.sh for new tests SOCKS5CONNECT_TCP4 and SOCKS5LISTEN_TCP4
This commit is contained in:
parent
e7df880af5
commit
29f9e4db92
8 changed files with 223 additions and 51 deletions
67
socks5server-echo.sh
Executable file
67
socks5server-echo.sh
Executable file
|
@ -0,0 +1,67 @@
|
|||
#! /usr/bin/env bash
|
||||
# Source: socks5connect-echo.sh
|
||||
|
||||
# Copyright Gerhard Rieger and contributors (see file CHANGES)
|
||||
# Published under the GNU General Public License V.2, see file COPYING
|
||||
|
||||
# Performs primitive simulation of a socks5 server with echo function via stdio.
|
||||
# Accepts and answers SOCKS5 CONNECT request without authentication to
|
||||
# 8.8.8.8:80, however is does not connect there but just echoes data.
|
||||
# It is required for test.sh
|
||||
# For TCP, use this script as:
|
||||
# socat TCP-L:1080,reuseaddr EXEC:"socks5connect-echo.sh"
|
||||
|
||||
#set -vx
|
||||
|
||||
if [ "$SOCAT" ]; then
|
||||
:
|
||||
elif type socat >/dev/null 2>&1; then
|
||||
SOCAT=socat
|
||||
else
|
||||
SOCAT=./socat
|
||||
fi
|
||||
|
||||
case `uname` in
|
||||
HP-UX|OSF1)
|
||||
CAT="$SOCAT -u STDIN STDOUT"
|
||||
;;
|
||||
*)
|
||||
CAT=cat
|
||||
;;
|
||||
esac
|
||||
|
||||
A="7f000001"
|
||||
P="0050"
|
||||
|
||||
# Read and parse SOCKS5 greeting
|
||||
read _ v b c _ <<<"$($SOCAT -u -,readbytes=3 - |od -t x1)"
|
||||
#echo "$v $b $c" >&2
|
||||
if [ "$v" != 05 ]; then echo "$0: Packet1: expected version x05, got \"$v\"" >&2; exit 1; fi
|
||||
if [ "$b" != 01 ]; then echo "$0: Packet1: expected 01 auth methods, got \"$b\"" >&2; exit 1; fi
|
||||
if [ "$c" != 00 ]; then echo "$0: Packet1: expected auth method 00, got \"$c\"" >&2; exit 1; fi
|
||||
# Send answer
|
||||
echo -en "\x05\x00"
|
||||
|
||||
# Read and parse SOCKS5 connect request
|
||||
read _ v b c d a1 a2 a3 a4 p1 p2 _ <<<"$($SOCAT -u -,readbytes=10 - |od -t x1)"
|
||||
#echo "$v $b $c $d $a1 $a2 $a3 $a4 $p1 $p2" >&2
|
||||
a="$a1$a2$a3$a4"
|
||||
p="$p1$p2"
|
||||
if [ "$v" != 05 ]; then echo "$0: Packet2: expected version x05, got \"$v\"" >&2; exit 1; fi
|
||||
if [ "$b" != 01 ] && [ "$b" != 02 ]; then echo "$0: Packet2: expected connect request 01 or bind request 02, got \"$b\"" >&2; exit 1; fi
|
||||
if [ "$c" != 00 ]; then echo "$0: Packet2: expected reserved 00, got \"$c\"" >&2; exit 1; fi
|
||||
if [ "$d" != 01 ]; then echo "$0: Packet2: expected address type 01, got \"$d\"" >&2; exit 1; fi
|
||||
if [ "$a" != "$A" ]; then echo "$0: Packet2: expected address $A, got \"$a\"" >&2; exit 1; fi
|
||||
if [ "$p" != "$P" ]; then echo "$0: Packet2: expected port $P, got \"$p\"" >&2; exit 1; fi
|
||||
if [ "$z" != "" ]; then echo "$0: Packet2: trailing data \"$z\"" >&2; exit 1; fi
|
||||
# Send answer
|
||||
echo -en "\x05\x00\x00\x01\x10\x00\x1f\x64\x1f\x64"
|
||||
|
||||
# Bind/listen/passive mode
|
||||
if [ "$b" == 02 ]; then
|
||||
sleep 1 # pretend to be waiting for connection
|
||||
echo -en "\x05\x00\x00\x01\x10\xff\x1f\x64\x23\x28"
|
||||
fi
|
||||
|
||||
# perform echo function
|
||||
$CAT
|
Loading…
Add table
Add a link
Reference in a new issue