nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 #! /bin/bash
2 # source: socks4echo.sh
3  
4 # Copyright Gerhard Rieger 2004-2006
5 # Published under the GNU General Public License V.2, see file COPYING
6  
7 # perform primitive simulation of a socks4 server with echo function via stdio.
8 # accepts and answers correct SOCKS4 requests, but then just echoes data.
9 # it is required for test.sh
10 # for TCP, use this script as:
11 # socat tcp-l:1080,reuseaddr,crlf system:"socks4echo.sh"
12  
13 # older bash and ksh do not have -n option to read command; we try dd then
14 if echo a |read -n 1 null >/dev/null 2>&1; then
15 HAVE_READ_N=1
16 else
17 HAVE_READ_N=
18 fi
19  
20 if type socat >/dev/null 2>&1; then
21 SOCAT=socat
22 else
23 SOCAT=./socat
24 fi
25  
26 case `uname` in
27 HP-UX|OSF1)
28 CAT="$SOCAT -u stdin stdout"
29 ;;
30 *)
31 CAT=cat
32 ;;
33 esac
34  
35 if [ $(echo "x\c") = "x" ]; then E=""
36 elif [ $(echo -e "x\c") = "x" ]; then E="-e"
37 else
38 echo "cannot suppress trailing newline on echo" >&2
39 exit 1
40 fi
41 ECHO="echo $E"
42  
43 if [ $($ECHO "\0101") = "A" ]; then
44 SOCKSREPLY_FAILED="\0\0133\0\0\0\0\0\0\c"
45 SOCKSREPLY_OK="\0\0132\0\0\0\0\0\0\c"
46 else
47 SOCKSREPLY_FAILED="\0\133\0\0\0\0\0\0\c"
48 SOCKSREPLY_OK="\0\132\0\0\0\0\0\0\c"
49 fi
50  
51 # read and parse SOCKS4 header
52 if [ "$HAVE_READ_N" ]; then
53 read -r -n 1 vn # bash 2.0.3 does not support -n
54 else
55 vn=$(dd bs=1 count=1 2>/dev/null)
56 fi
57 if [ "$vn" != $($ECHO "\04") ]; then
58 $ECHO "$SOCKSREPLY_FAILED"
59 echo "invalid socks version requested" >&2
60 exit
61 fi
62  
63 if [ "$HAVE_READ_N" ]; then
64 read -r -n 1 cd
65 else
66 cd=$(dd bs=1 count=1 2>/dev/null)
67 fi
68 if [ "$cd" != $($ECHO "\01") ]; then
69 $ECHO "$SOCKSREPLY_FAILED"
70 echo "invalid socks operation requested" >&2
71 exit
72 fi
73  
74 if [ "$HAVE_READ_N" ]; then
75 read -r -n 6 a
76 else
77 a=$(dd bs=1 count=6 2>/dev/null)
78 fi
79 if [ "$a" != "$($ECHO "}m bL6")" ]; then
80 $ECHO "$SOCKSREPLY_FAILED"
81 echo "$0: wrong socks address or port requested" >&2
82 echo "$0: expected $($ECHO "}m bL6"|od -t x1), received $($ECHO "$a"|od -t x1)" >&2
83 exit
84 fi
85  
86 if [ "$HAVE_READ_N" ]; then
87 read -r -n 7 u
88 else
89 u=$(dd bs=1 count=7 2>/dev/null)
90 fi
91 if [ "$u" != "nobody" ]; then
92 $ECHO "$SOCKSREPLY_FAILED"
93 echo "wrong socks user requested" >&2
94 exit
95 fi
96  
97 # send ok status
98 $ECHO "$SOCKSREPLY_OK"
99  
100 # perform echo function
101 $CAT