nexmon – Blame information for rev 1
?pathlinks?
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 |